我使用的是struts 2,现在有a、b、c、d 四个 Action 。四个页面都有一个“mobile view”
链接,点击该链接就会进入mobileCheck操作
设置session。
因此,在执行 mobileCheck 操作后,我想返回到调用操作,例如
1. click link in action a ==>mobileCheck action ==> return to a.action
2. click link in action b ==>mobileCheck action ==> return to b.action
3. click link in action c ==>mobileCheck action ==> return to c.action
4. click link in action d ==>mobileCheck action ==> return to d.action
我的项目中有几十个这样的操作, 有没有什么变量可以设置,我该怎么办,非常感谢。
最佳答案
如果所有这些操作都有相同的共同业务,那么更好的设计应该是使每个操作扩展 MobileCheck 操作。
修改 MobileCheck Action 以在 public String mobileView()
方法中执行业务(而不是执行);
修改Actions A、B、C、D来扩展它(public class ActionA extends MobileCheck
),其业务在execute()
中;
最后,使 mobileView()
方法返回 execute()
:它将返回您所在操作的 execute()
方法运行:
public class MobileCheck extends ActionSupport {
public String execute() throws Exception{
log.debug("MobileCheck execute() should never be invoked");
return SUCCESS;
}
public String mobileView() throws Exception{
// do something
log.debug("mobileView() business performed");
return execute(); /* THIS IS THE TRICK */
}
}
public class ActionA extends MobileCheck {
public String execute() throws Exception{
// do something
log.debug("ActionA execute() is invoked");
return SUCCESS;
}
}
public class ActionB extends MobileCheck {
public String execute() throws Exception{
// do something
log.debug("ActionB execute() is invoked");
return SUCCESS;
}
}
a.jsp
<s:form>
<s:submit method="mobileView" action="actionA"
value="call mobileView() and re-execute Action A" />
</s:form>
b.jsp
<s:form>
<s:submit method="mobileView" action="actionB"
value="call mobileView() and re-execute Action B" />
</s:form>
struts.xml
<action name="actionA" class="foo.bar.ActionA">
<result>a.jsp</result>
</action>
<action name="actionB" class="foo.bar.ActionB">
<result>b.jsp</result>
</action>
胜利的 KISS 范式
关于java - struts2中如何返回invoke Action ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16645459/