struts2页面取action中值
来源:互联网 发布:新店如何招募淘宝客 编辑:程序博客网 时间:2024/05/21 17:30
http://terje.blog.163.com/blog/static/1192437120108250138927/
老板啊老板,我无语。
public class ParmValueAction extends ActionSupport
{
private Usere user;
@Override
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;
}
}
jsp:
方法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: 使用property标签
terje 25
方法2: 使用property标签,使用#userKey对值栈进行查找
terje 25
方法3: 使用property标签,使用#action对值栈进行查找,同时使用默认的查找方式,该方法等同于方法1,在2.0中该方法不可用,2.1可用
terje 25
方法4: 使用property标签,使用#userReq对值栈进行查找,这里查不到该值,因为值栈中没有这个key
方法5: 使用property标签,使用#userReqMap对值栈进行查找,这里查不到该值,因为值栈中没有这个key
request取值方法,取保存在userReqMap中的user:
terje 25
request取值方法,取保存在userKey中的user:
terje 25
request取值方法,取保存在userReq中的user:
terje 25
request取值方法1,取保存在action中的user:
terje 25
request取值方法2,取保存在action中的user:
terje 25
jstl取值方法,取保存在userReq中的user:
terje 25
jstl取值方法,取保存在userReqMap中的user:
terje 25
jstl取值方法,取保存在userKey中的user:
terje 25
jstl取值方法1,取保存在action中的user:
terje 25
jstl取值方法2,通过action取保存在action中的user:
terje 25
直接使用java编码来取: 直接取: terje 25
取userMap: terje 25
取userKey: terje 25
取 action: terje 25
原因:通过查看
org.apache.struts2.dispatcher.StrutsRequestWrapper
源代码,以下这段代码是apache社区对Request做了包装,这样包装如果在页面中通过传统的取值方法找不到值,就到值栈中去找,这样一来不仅兼容了jstl和java代码直接取值,同时也保证struts2的标签能顺利取到值。
public Object getAttribute(String s) {
if (s != null && s.startsWith("javax.servlet")) {
// don't bother with the standard javax.servlet attributes, we can short-circuit this
// see WW-953 and the forums post linked in that issue for more info
return super.getAttribute(s);
}
ActionContext ctx = ActionContext.getContext();
Object attribute = super.getAttribute(s);
if (ctx != null) {
if (attribute == null) {
boolean alreadyIn = false;
Boolean b = (Boolean) ctx.get("__requestWrapper.getAttribute");
if (b != null) {
alreadyIn = b.booleanValue();
}
// note: we don't let # come through or else a request for
// #attr.foo or #request.foo could cause an endless loop
if (!alreadyIn && s.indexOf("#") == -1) {
try {
// If not found, then try the ValueStack
ctx.put("__requestWrapper.getAttribute", Boolean.TRUE);
ValueStack stack = ctx.getValueStack();
if (stack != null) {
attribute = stack.findValue(s);
}
} finally {
ctx.put("__requestWrapper.getAttribute", Boolean.FALSE);
}
}
}
}
return attribute;
}
- struts2页面取action中值
- struts2 action 页面跳转
- [struts2]struts2 action 页面跳转
- Struts2页面取值
- Struts2页面取值:
- struts2页面取值
- 取中值
- jsp页面取struts2 action的变量供java、servlet使用
- struts2 ognl 取action类中的值到jsp页面中
- struts2向标签s:textfield/输出action中值
- struts2 action以及页面跳转
- struts2进入页面执行action
- struts2 hidden 页面取值
- struts2 jsp页面取值
- struts2 jsp页面取值
- struts2 jsp页面取值
- Struts2标签页面取值
- struts2 jsp页面取值
- Spring与Hibernate两种组合方式
- Bulk Insert的用法
- c/c++宏的使用总结
- ucosii下使用外部SRAM
- android_UIThread 主线程 AsynTask Handler View.post
- struts2页面取action中值
- 求解: QTP FLEX 测试,编译文件中加入QTP的几个包以后,部分控件执行出错
- 加快二代支付系统建设
- MyEclipse优化加载速度
- C#中的委托和事件
- 字符串转成二维数组
- 诺基亚一路走好
- ZOJ 1095 Humble Numbers (构造)
- PHP内核介绍及扩展开发指南——Extensions 的编写