dcp*_*dcp 17 java struts2 valuestack
我有一个关于struts2值栈的问题.假设我有一个Action类RegisterAction,它有一个execute方法,如下所示:
public String execute() {
ValueStack stack = ActionContext.getContext().getValueStack();
stack.push(new String("test string"));
return SUCCESS;
}
Run Code Online (Sandbox Code Playgroud)
我的struts.xml看起来像这样:
<struts>
<package name="default" extends="struts-default">
<action name="*Register" method="{1}" class="vaannila.RegisterAction">
<result name="populate">/register.jsp</result>
<result name="input">/register.jsp</result>
<result name="success">/success.jsp</result>
</action>
<action name="*Test" method="{1}" class="vaannila.TestAction">
<result name="test">/test.jsp</result>
<result name="success">/success2.jsp</result>
</action>
</package>
</struts>
Run Code Online (Sandbox Code Playgroud)
因此,在该类中执行execute方法后,控制将流向success.jsp.
我的问题是:
1)如何获得我在堆栈中推送的值success.jsp?
2)让我们说success.jsp我有一个<s:submit method="testMethod" />重定向到一个名为的动作类TestAction.换句话说,从Register页面,用户单击submit,并在我们的执行方法中RegisterAction推送堆栈上的"测试字符串".然后我们去success.jsp.该success.jsp有一个提交按钮,指导我们TestAction#testMethod.在TestAction#testMethod,我RegisterAction#execute仍然在堆栈上推送的值是什么?我怎么才能得到它?我逐步完成了eclipse调试器,但我没有看到它的价值.
谢谢.
dcp*_*dcp 15
好的,我想通了.
1)我发现在值栈上获取对象以便我们可以从jsp访问它们的方式如下:
Map<String, Object> context = new HashMap<String, Object>();
context.put("key", "some object");
context.put("key2", "another object");
ActionContext.getContext().getValueStack().push(context);
Run Code Online (Sandbox Code Playgroud)
换句话说,我们可以在包含我们需要的对象的值栈上放置HashMap.然后,在jsp中,我们可以像这样访问实际值:
<s:property value="key" />
<s:property value="key2" />
Run Code Online (Sandbox Code Playgroud)
它将查看值栈并在我们推送的HashMap中找到这些值.
2)动作类的实例仅与一个请求相关联.因此,当我们转到另一个动作然后结束另一个jsp时,我们从第一个动作推送到值堆栈的东西将不会存在,因为其他动作具有它自己的值堆栈.参考:http://www.manning-sandbox.com/thread.jspa?messageID = 93045
如果有任何错误或有更聪明的方法来做这些事情,你们可以随意纠正我:).
谢谢.
| 归档时间: |
|
| 查看次数: |
33697 次 |
| 最近记录: |