Struts2_OGNL
利用 s:property 標籤和 OGNL 表達式來讀取值棧中的屬性值
1). 值棧中的屬性值:
- 對象棧: 對象棧中某一個對象的屬性值
- Map 棧: request, session, application 的一個屬性值 或 一個請求參數的值.
讀取對象棧中對象的屬性:
1.若想訪問 Object Stack 裏的某個對象的屬性. 可以使用以下幾種形式之一:
- object.propertyName ; object[‘propertyName’] ; object[“propertyName”]
2.ObjectStack 裏的對象可以通過一個從零開始的下標來引用. ObjectStack 裏的棧頂對象可以用 [0] 來引用, 它下面的那個對象可以用 [1] 引用.
- [0].message
- 若在指定的對象裏沒有找到指定的屬性, 則到指定對象的下一個對象裏繼續搜索. 即 [n] 的含義是從第 n 個開始搜索, 而不是隻搜索第 n 個對象
3.若從棧頂對象開始搜索, 則可以省略下標部分: message
- 結合 s:property 標籤:
<s:property value="[0].message" /> <s:property value="message" />
默認情況下, Action 對象會被 Struts2 自動的放到值棧的棧頂.
編碼:
同時借用helloworld中的代碼:
Show.jsp
<%@ page language="java" import="java.util.*" pageEncoding="utf-8" contentType="text/html; charset=UTF-8"%> <%@ taglib prefix="s" uri="/struts-tags" %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> </head> <body> <s:debug></s:debug> ID:${id}<br> 編號:${ dlh}<br> 姓名:${ name}<br> 部門:${ bmmc}<br> name:<%=request.getAttribute("name") %><br> name:<s:property value="name"/><br> name[0]:<s:property value="[0].name"/><br> </body> </html>
此時我們在action方法中手動壓入一個對象:
GG_CZY.java
public String save() { if(this.id==null){ this.id = UUID.randomUUID().toString().replace("-", ""); } //1.獲取值棧 ValueStack stack = ActionContext.getContext().getValueStack(); //2.給新對象複製 GG_CZY czy = new GG_CZY(); czy.setName("王小二"); czy.setBmmc("放牛"); //3將新對象壓入值棧中 stack.push(czy); return "save"; }
Show.jsp
<%@ page language="java" import="java.util.*" pageEncoding="utf-8" contentType="text/html; charset=UTF-8"%> <%@ taglib prefix="s" uri="/struts-tags" %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> </head> <body> <s:debug></s:debug> ID:${id}<br> 編號:${ dlh}<br> 姓名:${ name}<br> 部門:${ bmmc}<br> name:<%=request.getAttribute("name") %><br> name:<s:property value="name"/><br> name[0]:<s:property value="[0].name"/><br> name[1]:<s:property value="[1].name"/><br> </body> </html>