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;
分享到:
相关推荐
dsp中值滤波 dsp中值滤波 dsp中值滤波 dsp中值滤波
采用二维中值滤波函数medfilt2对受椒盐噪声干扰的图像滤波
自适应中值滤波函数。
实现了数字图像处理中的中值滤波,包含线、十字、X,方形、棱形、圆形窗口的滤波窗口。全都是自己写的,有注释。适用于交作业和研究学习中值滤波的朋友
很好的学习文档,并且实用初学者。帮助初学者更好的理解EL表达式的优势。
S(M)=和((x(i)-M)^2+(x(j)-M)^2) .^ 0.5 i 式中,i和j是指x的每一列的笛卡尔积与其自身的指数。当数据列包含一个或多个NaN或Inf元素时,不会执行平滑处理。在这种情况下,返回普通中值。 该函数以普通...
RGB2YUV 与 高斯滤波 中值滤波 均值滤波
基于matlab的中值滤波算法,对图像进行去噪处理
中值滤波
中值滤波Java实现.实现图像中值滤波。
中值滤波verilog.rar 中值滤波Verilog代码 verilog , 中值滤波
MFC中值滤波 MFC中值滤波 MFC中值滤波 MFC中值滤波
用C语言实现的改进的中值滤波算法哦(中值算法)
快速中值滤波的论文~~~ 毫不容易找的哦,希望大家支持~~~~~
一种基于自适应的新型中值滤波算法,很不错,希望对大家有所帮助。
matlab编程对带椒盐噪声的图片进行中值滤波处理
verilog编写的中值滤波
均值滤波和中值滤波在matlab中的应用及其matlab代码
中值滤波的程序代码 可执行对图片的中值滤波
matlab代码,中值滤波,比较简单,适合初学者使用,直接运行即可。