在Struts2中创建多个操作

时间:2012-05-12 14:04:23

标签: struts2

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

3 个答案:

答案 0 :(得分: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. 注册
  4. 为此,我们不需要创建不同的Action类,但是我们可以创建一个单独的动作类,例如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,你可以映射到任何数字。

答案 1 :(得分:2)

另一种方法:

这是包含3个动作的动作类(execute,action1,action2)

public class MyAction extends ActionSupport{

   public String execute(){
     return SUCCESS;
   }

   public String action1(){
     return SUCCESS;
   }

   public String action2(){
     return SUCCESS;
   }
}

这是config:

<action name="myAction" class="MyAction">
  <result>showMe.jsp</result>
  <result name="input">showMe.jsp</result>
</action>

默认情况下将调用操作“execute”。 要调用操作“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。

答案 2 :(得分:2)

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

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

Link1 Link2 Link3