我有两个Struts2动作,并且两个动作都被链接,因此流程顺序为 action1 ---> action2 ---> display.jsp
class Action1 extends ActionSupport
{
public String display()
{
Student stud = new Student();
stud.setName("I am from Action1");
//what should be done here so that I can get stud in another action via chain
return "success";
}
}
class Action2 extends ActionSupport
{
private Student stud;
//getter/setter
public String display()
{
Sting name = stud.getName();//getting NULL here
return "success";
}
}
我想通过链将stud对象从一个动作传递到另一个动作。 我的strut2.xml设置如下
<action name="action1" class="com.internet.Action1" method="display">
<result name="success" type="chain">action2</result>
</action>
action name="action2" class="com.internet.Action2" method="display">
<result name="success" type="tiles">MyDiplayPage</result>
</action>
我在3.0春季工作过,我对struts2感到不舒服,并试图获得舒适感......请帮我解决问题。
答案 0 :(得分:1)
也许Chaining Interceptor
就是您looking for:
如果您需要复制之前的操作中的属性 链到当前动作,你应该应用链接 拦截器。拦截器将复制原始参数 请求,并将ValueStack传递给目标Action。该 源操作由ValueStack记住,允许目标 使用。访问前面Action的属性的操作 ValueStack,并使这些属性可用于最终 链的结果,例如JSP或Velocity页面。
您可以从Value Stack
访问您想要的任何内容。只需将你想要的Bean从一个Action推送到它的Value Stack:
Map<String, Object> myValues = new HashMap<String, Object>();
myValues.put("key", myBean);
ActionContext.getContext().getValueStack().push(myValues);
传递一些值是可以的,但要注意过度需要将信息从一个动作传递到另一个动作,这可能是你需要重新思考动作范围的症状:
所有核心逻辑都应该被推回支持类或者 业务门面,使Actions只调用方法。行动是最好的 用作适配器,而不是编码逻辑的类 定义