1

如何在单个动作类中在 Struts2 中创建多个动作?请举例?我在搜索互联网时发现了以下代码,但它给出了错误或者我是否需要为每个请求编写单独的操作类?

4

3 回答 3

4

除了@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 类,它负责处理用户交互,例如

  1. 登录
  2. 登出
  3. 登记

为此,我们不需要创建不同的动作类,但我们可以创建一个动作类,比如 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 进行映射,您可以映射到任何数字。

于 2012-05-12T15:53:38.457 回答
2

我得到了您的确切问题,您想根据选择的操作(例如在单个位置添加/编辑/删除代码)在单个操作中编写多个重定向。您应该根据您的要求寻找DispatchAction

以下是您可以查看的几个示例,所有示例都提供了如何实现 DispatchAction。

链接1 链接2 链接 3

于 2012-05-19T04:51:29.873 回答
2

另一种方法:

这是具有 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。

于 2012-05-14T07:33:11.357 回答