我见过许多教程,其中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>
我无法理解它。如何调用用户名?
答案 0 :(得分:1)
我认为这不起作用,因为您的映射指向不存在的方法(添加,列表)。您的操作中有addUser
和listUser
,因此您的映射必须指向相同的方法
回到你的问题我不得不说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/listUser
和http://yourDomainHere/addUser
,知道相同的映射将处理两者,并且将调用您的相应方法。
编辑评论
我想我明白了你的意思。在您提供的示例中,listCustomer
永远不会被调用。这是addCustomer
在发送customerList
之前填充success
,并且因为它为列表提供了getter方法,所以在页面中您可以访问它并迭代它并显示值。