一. 动态方法调用
一个Action包含多个业务处理功能,根据用户请求表单的不同,调用不同的方法,与struts1的DispatchAction相似.
首先要设置:
struts.enable.DynamicMethodInvocation=true 设置支持动态方法调用,默认为true,可以不用设
Action与配置不变:
public class LogonAction {
private String userName;
private String userPwd;
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getUserPwd() {
return userPwd;
}
public void setUserPwd(String userPwd) {
this.userPwd = userPwd;
}
public String login() throws Exception{
return "succee";
}
}
Action配置
<action name="logon" class="com.LogonAction"> <result name="succee">/logon/welcome.jsp</result> <result name="input">/logon/logon.jsp</result> </action>
<form action="logon!login.action" method="post">
Logon!logon.action:意思是提交表单给 logon.action的login()方法来处理
二 使用通配符
1.
<action name="user*" class="com.UserAction" method="{1}"> <result name="succee">/logon/welcome.jsp</result> <result name="input">/logon/logon.jsp</result> </action>
比如当用户请求userLogon时,会被UserAction类处理,method{1}中{1}值为name属性中第一个*的值.
2.
<action name="*Action_*" class="com.{1}" method="{2}"> <result name="succee">/logon/welcome.jsp</result> <result name="input">/logon/logon.jsp</result> </action>
当用户请求UserAction_logon时,会被UserAction类的logon方法处理
与上面一样,class中{1}的值为name属性中第一个*的值,也就是UserAction,{2}的值为name属性中第二个*的值,即为logon
三.跟据请求参数觉定结果
<action name="logon" class="com.LogonAction"> <result name="succee" type="redirect">/logon/welcome.jsp?userName=${userName}</result> <result name="input">/logon/logon.jsp</result> </action>
Welcome.jsp
<body>
request.getParamter:<%=request.getParameter("userName") %>
</body>
${属性名} 就是action中的属性值.
在welcome.jsp中可以通过request.getparamter得到userName的值