按照之前所讲的,我们会写很多的Action,在实际开发中会显得非常麻烦,所以下面介绍一下
(一)
动态方法调用
作用:减少Action数量
使用:actionName!methodName.action
禁用:将属性struts.enable.DynamicMethodInvocation设置为false
代码贴下来
UserAction:
package com.mynews.action;
import com.mynews.entity.Users;
import com.mynews.service.LoginService;
import com.opensymphony.xwork2.ActionSupport;
public class UserAction extends ActionSupport {
/**
*
*/
private static final long serialVersionUID = 1L;
private Users user;
public Users getUser() {
return user;
}
public void setUser(Users user) {
this.user = user;
}
private LoginService ls=new LoginService();
public String doLogin(){
Users myuser = ls.login(user);
if (myuser != null) {return "login_success";}
else{super.addActionError("用户名或密码错误");
return "login_input";}
}
public String doReg(){
int ret=1;
if(ret==1)return "reg_success";
return "reg_input";
}
}
login.jsp
<s:actionerror/>
<form action="/mynews/userAction!doLogin.action" method="post">
用户名:<input type="text" name="user.uname"/><br/>
密 码:<input type="password" name="user.upass"/><br/>
<input type="submit" value="登录"/><input type="reset" value="重置"/>
</form>
</body>
register.jsp
<s:form action="userAction!doReg" namespace="/" method="post">
用户名:<s:textfield name="user.uname"></s:textfield><s:fielderror fieldName="uname_error" /><br/>
密码:<s:password name="user.upass"></s:password><s:fielderror fieldName="upass_error" /><br/>
出生日期:<s:textfield name="user.birthday"></s:textfield><br/>
<s:submit value="提交" />
</s:form>
struts.xml
<action name="userAction" class="com.mynews.action.UserAction">
<result name="login_input">/ch01/login.jsp</result>
<result name="login_success">/ch01/main.jsp</result>
<result name="reg_success">/ch01/login.jsp</result>
<result name="reg_input">/ch01/register.jsp</result>
</action>
(二)
method属性
结合通配符(*)的使用<form action="/mynews/doLogin_user" method="post">
用户名:<input type="text" name="user.uname"/><s:fielderror fieldName="uname_error"/><br/>
密 码:<input type="password" name="user.upass"/><s:fielderror fieldName="upass_error"/><br/>
<input type="submit" value="登录"/><input type="reset" value="重置"/>
</form>
<s:form action="doReg_user" namespace="/" method="post">
用户名:<s:textfield name="user.uname"></s:textfield><s:fielderror fieldName="uname_error" /><br/>
密码:<s:password name="user.upass"></s:password><s:fielderror fieldName="upass_error" /><br/>
出生日期:<s:textfield name="user.birthday"></s:textfield><br/>
<s:submit value="提交" />
</s:form>
strut.xml文件
<action name="*_user" class="com.mynews.action.UserAction" method="{1}">
<result name="login_input">/ch01/login.jsp</result>
<result name="login_success">/ch01/main.jsp</result>
<result name="reg_success">/ch01/login.jsp</result>
<result name="reg_input">/ch01/register.jsp</result>
</action>
默认的错误处理页面的设置:
<package name="default" namespace="/" extends="struts-default" >
<default-action-ref name="defaultAction"></default-action-ref>
<action name="defaultAction">
<result>/ch01/404.jsp</result>
</action>
</package>
struts2常量配置
struts.devMode
作用:输出很多有用的日志
struts.configuration.xml.reload
每次执行action的时候重新加载相关配置文件
struts.il8n.reload
Result配置
常用结果类型
dispatcher:请求转发
redirect:重定向
chain:从一个Action跳到另一个Action
redirectAction:从一个Action跳到另一个Action