struts2 新手问题

2个小问题望解答:
①我在自己的Action里添加ActionContext.getContext().put("Test", "get!!");语句以后,在返回result的jsp页面中添加<s:property value="Test"/>为什么可以显示get!!字符串?
用put方法应该是把value添加到StackContext里,而不是valueStack里!
要得到这个字符串的话应该<s:property value="#Test"/>而不是<s:property value="Test"/>....但是两者都可以得到这个字符串...这是为什么?(valueStack里没有这个值,stackContext里有)

②Action里调用
HttpServletRequest request = ServletActionContext.getRequest();
request.setAttribute("request", "request");
在返回的jsp页面中用el ${requestScope.request }是可以得到字符串的,但是用<%request.getAttribute("request");%>是不行的。这是为什么呢?
稍微查了下资料,有人说“Struts2重写了request对象的getAttribute方法”,我稍微看了下Struts2的代码,它是先调用Object attribute = super.getAttribute(s); 然后去判断atribute是否为null,null的话再继续在ActionContext里去get这个Object..回到这个问题..原本super的request已经设置过attribute了,那super.getAttribute(s)应该是有返回值的,为什么<%request.getAttribute("request");%>还是什么都不返回呢?

真心求解。。谢谢

第二个问题并不是你没取到值,而是你没有输出,输出是<%= request.getAttribute("request")
%>(注意没有分号),你写成<%request.getAttribute("request");%>只是取了值,并没有输出。

至于第一个问题,我试了一下,确实在值栈中没有找到,有一个奇怪的现象,即便是用ActionContext.getContext.getValueStack.set(key,value)方法,valueStack中依然找不到你放入的key,但property标签却可以获得到,但用#key的方式就得不到了。

ActionContext.getContext().put用两种方式都能获得到的唯一的解释就是ActionContext中的内容并没有存在于valueStack中,property标签并不是只在valueStack中查值的,而是整个Root区,valueStack只是这个Root区的一部分,但这仅仅是我个人的理解猜测,但愿会有大神看到这个问题,我也想学习一下
温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-04-06
request对象不是ServletActionContext.getRequest();换种方式就可以的追问

request对象不是ServletActionContext.getRequest()是什么意思....

相似回答
大家正在搜