使用多个方法的struts.xml映射操作

时间:2011-06-19 10:26:17

标签: java struts2

我见过许多教程,其中action除了执行

之外还有很多方法
public class UserAction {

    public TestAction() {
    }

    public String execute() throws Exception {
      System.out.println("hello i aam action");

        return "success";
    }

    public String addUser(String name)
    {

     return "success";


   }

    public String listUser(String name)
    {

     return "success";


    }

    }

动作映射就像这样完成

  <action name="addUser" method="addUser" class="com.vaannila.web.UserAction">
  <result name="success" type="redirect">listUser</result>
</action>

<action name="listUser" method="listUser" class="com.vaannila.web.UserAction"> 
  <result name="success">/register.jsp</result>
 </action>

我无法理解它。如何调用用户名?

1 个答案:

答案 0 :(得分:1)

我认为这不起作用,因为您的映射指向不存在的方法(添加,列表)。您的操作中有addUserlistUser,因此您的映射必须指向相同的方法 回到你的问题我不得不说Struts2有一个功能,让你可以将几个方法打包到同一个动作中。当您想要执行CRUD操作时,这特别有用。一种方法是在映射中明确预先确定要调用的方法:

<action name="listUser" method="list" class="com.vaannila.web.UserAction"> 
    <result name="success">/register.jsp</result>
</action>

如果您将浏览器指向http://yourDomainHere/listUser,则list操作中的UserAction方法将被执行。您还可以在此处使用通配符映射,如:

<action name="*User" method="{1}" class="com.vaannila.web.UserAction"> 
    <result name="success">/register.jsp</result>
</action>

在这种情况下,您可以使用操作中的任何方法替换星号(*)。此映射将把映射中的第一个占位符({1})作为方法并调用它。因此,您可以将浏览器指向:http://yourDomainHere/listUserhttp://yourDomainHere/addUser,知道相同的映射将处理两者,并且将调用您的相应方法。

编辑评论
我想我明白了你的意思。在您提供的示例中,listCustomer永远不会被调用。这是addCustomer在发送customerList之前填充success,并且因为它为列表提供了getter方法,所以在页面中您可以访问它并迭代它并显示值。