如何在单个动作类中在 Struts2 中创建多个动作?请举例?我在搜索互联网时发现了以下代码,但它给出了错误或者我是否需要为每个请求编写单独的操作类?
3 回答
除了@Quaternion 所说的,S2 动作本身就是 java 类,我不确定你在问什么(Struts2 中的多个动作在单个动作类中)。
我们有几种使用单个 S2 动作类的方法,这里只介绍几种
映射具有不同别名的单个动作类。
<action name="A" class="MyActionClass">
<result type="redirectAction">Menu</result>
<result name="input">/Logon.jsp</result>
</action>
<action name="B" class="MyActionClass">
<result type="redirectAction">Menu</result>
<result name="input">/Logon.jsp</result>
</action>
但我相信您想将不同的操作请求映射到不同的操作方法。S2 提供了一种方法来定义任意数量的方法,我们可以告诉 S2 从 UI 调用哪个动作类的哪个方法。
例如,假设我们有一个 UserAction 类,它负责处理用户交互,例如
- 登录
- 登出
- 登记
为此,我们不需要创建不同的动作类,但我们可以创建一个动作类,比如 UserAction,并且可以在其中定义不同的方法,并且可以配置 S2 以调用不同的方法,例如
<action name="Logon" class="UserAction" method="logon">
<result type="redirectAction">Menu</result>
<result name="input">/Logon.jsp</result>
</action>
<action name="Logout" class="UserAction" method="logout">
<result type="redirectAction">Menu</result>
<result name="input">/Logon.jsp</result>
</action>
<action name="Register" class="tUserAction" methood="register">
<result type="redirectAction">Menu</result>
<result name="input">/Logon.jsp</result>
</action>
希望这可以帮助您消除疑虑
在上述用例MyActionClass
中,已使用两个别名 A 和 B 进行映射,您可以映射到任何数字。
我得到了您的确切问题,您想根据选择的操作(例如在单个位置添加/编辑/删除代码)在单个操作中编写多个重定向。您应该根据您的要求寻找DispatchAction。
以下是您可以查看的几个示例,所有示例都提供了如何实现 DispatchAction。
另一种方法:
这是具有 3 个动作(执行、动作 1、动作 2)的动作类
public class MyAction extends ActionSupport{
public String execute(){
return SUCCESS;
}
public String action1(){
return SUCCESS;
}
public String action2(){
return SUCCESS;
}
}
这是配置:
<action name="myAction" class="MyAction">
<result>showMe.jsp</result>
<result name="input">showMe.jsp</result>
</action>
默认情况下将调用“执行”操作。要调用动作“action1”或“action2”,您必须在请求中输入名称为“method:action1”或“method:action2”的参数。
- 调用默认操作(执行): /path_to_action/myAction.action
- 调用 action1: /path_to_action/myAction.action ?method:action1
- 调用 action2: /path_to_action/myAction.action ?method:action2
您可以更改默认方法:
<action name="myAction" class="MyAction" method="action1">
<result>showMe.jsp</result>
<result name="input">showMe.jsp</result>
</action>
因此,当您调用 /path_to_action/myAction.action 时,将执行 action1。