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;
分享到:
相关推荐
4. 取排序后的中间值作为当前像素的新值,即中值滤波的结果。 5. 继续移动窗口,重复以上步骤,直至处理完整个图像。 在DSP系统中实现中值滤波,通常需要考虑以下几点: 1. 数据存储:由于需要对邻域像素值进行排序...
10. 与MATLAB内置函数medfilt2的对比:在文档中,作者提供了一个与MATLAB内置中值滤波函数medfilt2的对比示例,这有助于观察自定义中值滤波算法与标准算法的差异,并评估性能。 通过上述知识点的整理,我们可以了解...
在图像处理领域,中值滤波器是一种广泛应用的非线性滤波技术,尤其在抑制噪声和提升图像质量方面表现出色。本文主要讨论了在单片机与DSP系统中,如何利用Altera公司的Stratix II EP2S60 FPGA芯片实现一种改进的中值...
针对这种噪声,一种有效的滤波方法是使用二维中值滤波,其中MATLAB中的`medfilt2`函数是一个强大的工具。 `medfilt2`函数是MATLAB中的二维中值滤波器,用于对图像进行滤波操作,特别适合消除椒盐噪声。它的基本原理...
与传统的线性滤波器不同,中值滤波器不考虑像素的加权平均值,而是取图像窗口内像素值的中值作为输出。这种操作可以有效保护边缘信息,因为边缘通常由连续像素的大值差构成,而噪声通常是孤立的、极端的值,所以中值...
窗口内的像素灰度值按照一定的顺序排列,然后取中间的值作为该位置的新灰度值。对于椒盐噪声,由于噪声点的灰度值极端,所以会被位于中间的正常像素值所取代,从而达到去噪效果。 在Verilog中实现中值滤波,主要...
在MATLAB中,我们可以使用内置的`medfilt2`函数来进行二维中值滤波。例如,如果有一张名为`image.jpg`的图像,我们可以通过以下代码对其进行中值滤波: ```matlab filteredImage = medfilt2(imread('image.jpg'), ...
2. **滤波窗口**:中值滤波通常使用一个固定的大小(如3x3、5x5)的方形或圆形窗口,在图像上滑动,对每个窗口内的像素进行处理。 3. **中位数计算**:对于窗口内的像素值,按照灰度值从小到大排序,取中间值作为该...
中值滤波的基本原理是,对于图像中的每一个像素点,取其周围邻域内像素的中值作为该点的新值。相比于均值滤波,中值滤波对噪声的抑制效果更好,因为它不受到极端值(如噪声)的影响。中值滤波器通常使用一个固定大小...
2. **窗口移动策略**:根据窗口的对称性特征,设置合理的移动顺序,以便于在移动过程中利用相邻窗口的信息。 3. **利用已排序信息**:通过对窗口中的像素进行预排序,可以在后续移动时快速调整顺序,减少新的排序...
2. **灰度转换**:由于中值滤波通常应用于灰度图像上,因此需要将彩色图像转换为灰度图像。这里使用`rgb2gray`函数完成转换: ```matlab J = rgb2gray(I); ``` 3. **获取图像尺寸**:通过`size`函数获取图像的...
给定代码展示了如何使用MATLAB中的`medfilt2`和`conv2`函数来进行中值滤波和均值滤波操作。 1. **读取并转换图像** ```matlab N = imread('图像路径'); % 读取图像 M = rgb2gray(N); % 转换为灰度图像 imshow...
自适应中值滤波函数。
MATLAB提供了`medfilt2`函数来执行二维中值滤波。同样以`inputImage`为例,应用3x3的中值滤波器可以这样写: ```matlab outputImage = medfilt2(inputImage, filterSize); ``` 这里`filterSize`依然表示滤波窗口...
很好的学习文档,并且实用初学者。帮助初学者更好的理解EL表达式的优势。
7. `fix(w/2)+1`计算窗口中值的索引位置,因为中值滤波器取的是中间值,所以是排序后窗口大小的一半加1。 8. `me`变量存储了排序后中间位置的元素,即滑动窗口的中值。 9. 循环结束后,原始数据中的每个点都被其...
- 配置Struts2框架,包括`<struts>`、`<package>`、`<action>`、`<interceptor-ref>`和`<result>`等标签。 - 例如,配置`<package>`标签时,设置`name="csg_taglib"`,`namespace="/taglib"`,`extends="struts-...
中值滤波的具体原理是选取一个含有奇数个像素点的掩模窗口,在图像数据中滑动,每次移动窗口时,取出窗口内所有像素点的灰度值,并将这些值进行排序,最终取排序后的中间值作为窗口中心像素的新值。在CUDA实现中,...
MATLAB中实现中值滤波主要使用`medfilt2`函数。例如,假设我们有一个名为`image`的二维矩阵表示图像,我们可以使用以下代码进行中值滤波: ```matlab filteredImage = medfilt2(image, [windowSize windowSize]); `...
2. **存储单元设计**:为了计算每个像素点的中值,需要存储其邻域内的所有像素值。这通常通过二维数组或者移位寄存器来实现。 3. **数据排序**:获取像素邻域数据后,需要进行排序以找出中值。由于Verilog不支持...