struts2中的Action默认执行方法为execute(),尽管可以通过<action name="addUser" class="addUser" method="doFun">设置默认执行方法,但也难以改变一个<action>一个方法的窘境。
那么,一个Action中多个方法,如何配置呢?
先上方法,简单举例:用户管理
UserManagerAction.java
- public class UserManagerAction extends ActionSupport implements RequestAware {
- private User user;
- @Resource
- private UserManager userManager;
- private Map<String, Object> request;
- @Override
- public void setRequest(Map<String, Object> request) {
- this.request = request;
- }
- public User getUser() {
- return user;
- }
- public void setUser(User user) {
- this.user = user;
- }
- public String addUser() throws Exception {
- System.out.println("-----UserManagerAction.addUser()-----");
- userManager.addUser(user);
- return "success";
- }
- public String modifyUser() {
- System.out.println("-----UserManagerAction.modifyUser()-----");
- userManager.modifyUser(user);
- return "success";
- }
- public String delUser() {
- System.out.println("-----UserManagerAction.delUser()-----");
- userManager.delUser(user.getUsername());
- return "success";
- }
- public String queryUser() {
- System.out.println("-----UserManagerAction.queryUser()-----");
- User user1 = userManager.queryUser(user.getUsername());
- request.put("user1", user1);
- return "success";
- }
- public String queryAllUser() {
- System.out.println("-----UserManagerAction.queryAllUser()-----");
- List<User> userList = userManager.queryAllUser();
- request.put("userList", userList);
- return "success";
- }
- }
public class UserManagerAction extends ActionSupport implements RequestAware {
private User user;
@Resource
private UserManager userManager;
private Map<String, Object> request;
@Override
public void setRequest(Map<String, Object> request) {
this.request = request;
}
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
public String addUser() throws Exception {
System.out.println("-----UserManagerAction.addUser()-----");
userManager.addUser(user);
return "success";
}
public String modifyUser() {
System.out.println("-----UserManagerAction.modifyUser()-----");
userManager.modifyUser(user);
return "success";
}
public String delUser() {
System.out.println("-----UserManagerAction.delUser()-----");
userManager.delUser(user.getUsername());
return "success";
}
public String queryUser() {
System.out.println("-----UserManagerAction.queryUser()-----");
User user1 = userManager.queryUser(user.getUsername());
request.put("user1", user1);
return "success";
}
public String queryAllUser() {
System.out.println("-----UserManagerAction.queryAllUser()-----");
List<User> userList = userManager.queryAllUser();
request.put("userList", userList);
return "success";
}
}
struts.xml配置,一个Action处理多个请求的配置
1.第一种方法:多个<action>标签,设置不同的method属性
- <package name="userManager" namespace="/user" extends="struts-default">
- <action name="addUser" class="com.ys.action.UserManagerAction" method="addUser" />
- <action name="modifyUser" class="com.ys.action.UserManagerAction" method="modifyUser" />
- <action name="delUser" class="com.ys.action.UserManagerAction" method="delUser" />
- </package>
<package name="userManager" namespace="/user" extends="struts-default">
<action name="addUser" class="com.ys.action.UserManagerAction" method="addUser" />
<action name="modifyUser" class="com.ys.action.UserManagerAction" method="modifyUser" />
<action name="delUser" class="com.ys.action.UserManagerAction" method="delUser" />
</package>
2.第二种方法:采用!的方式访问请求,例如:user/userManager!addUser
- <package name="userManager" namespace="/user" extends="struts-default">
- <action name="userManager" class="com.ys.action.UserManagerAction">
- <result name="success">/success.jsp</result>
- <result name="error" type="redirect">/error.jsp</result>
- </action>
- </package>
<package name="userManager" namespace="/user" extends="struts-default">
<action name="userManager" class="com.ys.action.UserManagerAction">
<result name="success">/success.jsp</result>
<result name="error" type="redirect">/error.jsp</result>
</action>
</package>
*.jsp页面请求如:myForm.action = "user/userManager!addUser";
3.第三种方法:采用通配符的方式(推荐)
- <package name="userManager" namespace="/user" extends="struts-default">
- <action name="*User_*" class="UserManagerAction" method="{1}User">
- <result name="success">/{2}.jsp</result>
- <result name="error" type="redirect">/error.jsp</result>
- </action>
- </package>
<package name="userManager" namespace="/user" extends="struts-default">
<action name="*User_*" class="UserManagerAction" method="{1}User">
<result name="success">/{2}.jsp</result>
<result name="error" type="redirect">/error.jsp</result>
</action>
</package>
({1}匹配第一个*,{2}匹配第二个*)
*.jsp页面请求如:myForm.action = "user/addUser_success";