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>
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>