1. 程式人生 > >Struts2標籤取值方式一/二

Struts2標籤取值方式一/二

Struts2標籤取值方式  


1.標籤取值方式一 —— <s:property value="" />
    當Action的valueStack中有該屬性的值時,只需直接使用該屬性的名字即可; 
    當Action的valueStack中沒有該屬性的值時,比如在session,application範圍中的屬性值時,需要加#或者#attr.;
    例子: 
    假設某Action中有person成員變數,在application中存在company屬性 
    那麼我們可以通過以下方法取值: 
    <s:property value="person.name" /> 
    <s:property value="#person.name" /> 
    <s:property value="company.name" /> //無法取到,因為company不在action的valueStack中 
    <s:property value="#company.name" />


2.標籤取值方式二 —— 任意<s:/>標籤內使用%{}
當Action的valueStack中有該屬性的值時,只需直接使用該屬性的名字即可; 
當Action的valueStack中沒有該屬性的值時,比如在session,application範圍中的屬性值時,需要加#或者#attr.; 
例子: 
假設某Action中有person成員變數,在application中存在company屬性 
<s:textfield name="person.name" value="person.name" /> //錯誤,value會直接顯示person.name字樣 
<s:textfield name="person.name" value="%{person.name}" /> 
<s:textfield name="person.company.name" value="%{#company.name}" /> 
<s:textfield name="person.company.name" value="%{#attr.company.name}" />


3.獲取JSP頁面的request,session,application中的屬性
   在頁面中可以這樣獲取:
<td>${applicateionScope.counter}</td>
<td>${sessionScope.counter}</td>
<td>${requestScope.counter}</td>
   或者直接這樣用:${屬性} ${userBean.username}。userBean可以是request或session中的物件。


struts2中的Action程式碼中的內容為:
ActionContext ctx = ActionContext.getContext();
ctx.getApplication.put("counter",new Integer(5));
ctx.getSession.put("counter",new Integer(5));
ctx.put("counter",new Integer(5));
ctx.put就是直接設定request的值。


也可以使用以下方式獲得request:
HttpServletRequest request = ServletActionContext.getRequest();
HttpServletResponse response = ServletActionContext.getResponse();


struts2還提供了以下介面:
ServletContextAware:Action實現該介面,可以直接訪問ServletContext。
ServletRequestAware:Action實現該介面,可以直接訪問HttpServletRequest。
ServletResponseAware:Action實現該介面,可以直接訪問HttpServletResponse。




======================================================================================


Struts2標籤取值方式  


Action中JAVA程式碼
public class ParmValueAction extends ActionSupport
{
private Usere user;


public String execute() throws Exception
{
ActionContext ctx = ActionContext.getContext();
HttpServletRequest req = ServletActionContext.getRequest();
Map<String, Object> requestMap = (Map<String, Object>) ctx.get("request");


ctx.put("userKey", user);
requestMap.put("userReqMap", user);
req.setAttribute("userReq", user);


return SUCCESS;
}


public Usere getUser()
{
return user;
}


public void setUser(Usere user)
{
this.user = user;
}
}
方法1:
使用property標籤
<br>
<s:property value="user.name"/>
<s:property value="user.age"/>
<br>
方法2:
使用property標籤,使用#userKey對值棧進行查詢
<br>
<s:property value="#userKey.name"/>
<s:property value="#userKey.age"/>
<br>
方法3:
使用property標籤,使用#action對值棧進行查詢,同時使用預設的查詢方式,該方法等同於方法1,在2.0中該方法不可用,2.1可用
<br>
<s:property value="#action.user.name"/>
<s:property value="#action.user.age"/>
<br>
方法4:
使用property標籤,使用#userReq對值棧進行查詢,這裡查不到該值,因為值棧中沒有這個key
<br>
<s:property value="#userReq.user.name"/>
<s:property value="#userReq.user.age"/>
<br>
方法5:
使用property標籤,使用#userReqMap對值棧進行查詢,這裡查不到該值,因為值棧中沒有這個key
<br>
<s:property value="#userReqMap.name"/>
<s:property value="#userReqMap.age"/>
<br>


<hr>
request取值方法,取儲存在userReqMap中的user:
<br>
<s:property value="#request.userReqMap.name"/>
<s:property value="#request.userReqMap.age"/>
<br>
request取值方法,取儲存在userKey中的user:
<br>
<s:property value="#request.userKey.name"/>
<s:property value="#request.userKey.age"/>
<br>
request取值方法,取儲存在userReq中的user:
<br>
<s:property value="#request.userReq.name"/>
<s:property value="#request.userReq.age"/>
<br>
request取值方法1,取儲存在action中的user:
<br>
<s:property value="#request.user.name"/>
<s:property value="#request.user.age"/>
<br>
request取值方法2,取儲存在action中的user:
<br>
<s:property value="#request.action.user.name"/>
<s:property value="#request.action.user.age"/>
<br>
<hr>
jstl取值方法,取儲存在userReq中的user:
<br>
<c:out value="${request.userReq.name}"></c:out>
<c:out value="${request.userReq.age}"></c:out>
<br>
jstl取值方法,取儲存在userReqMap中的user:
<br>
<c:out value="${request.userReqMap.name}"></c:out>
<c:out value="${request.userReqMap.age}"></c:out>
<br>
jstl取值方法,取儲存在userKey中的user:
<br>
<c:out value="${request.userKey.name}"></c:out>
<c:out value="${request.userKey.age}"></c:out>
<br>
jstl取值方法1,取儲存在action中的user:
<br>
<c:out value="${request.user.name}"></c:out>
<c:out value="${request.user.age}"></c:out>
<br>
jstl取值方法2,通過action取儲存在action中的user:
<br>
<c:out value="${request.action.user.name}"></c:out>
<c:out value="${request.action.user.age}"></c:out>
<br>
<hr>
直接使用java編碼來取:
<%
Usere user = (Usere)request.getAttribute("userReq");
Usere userMap = (Usere) request.getAttribute("userReqMap");
Usere userKey = (Usere) request.getAttribute("userKey");
//2.0中無法取到action,本次測試的版本為2.1.8.1
ParmValueAction action=(ParmValueAction)request.getAttribute("action");
//Usere userAction=action.getUser();
//String name=userAction.getName();
//int age=userAction.getAge();
%>
直接取:
<%=user.getName() %>
<%=user.getAge() %>
<br>
取userMap:
<%=userMap.getName()%>
<%=userMap.getAge()%>
<br>
取userKey:
<%=userKey.getName()%>
<%=userKey.getAge()%>
<br>
取 action:
<%=action.getUser().getName()%>
<%=action.getUser().getAge()%>
</body>