Struts 2 核心技术----搭建过程以及一个实例(2)
?
接上!Struts 2 核心技术----搭建过程以及一个实例(1)
?
三、使用Action类控制导航业务数据
Struts2中Action充当着一个关键角色。它解决了如何把JSP页面上的数据,根据实际开发项目中具体的业务逻辑,来进行处理的问题。
技术要点:
1、如何调用execute方法处理业务逻辑
2、如何处理form表单数据
3、HTTP的session对象在Action的主要使用方式
4、ActionMapping对象配置文件中的处理流程
?
Eg:
LoginAction是一个负责登录的类,主要处理登录过程中用户属性的处理,如获取用户名和密码。代码如下:
package?struts.action;
?
import?com.opensymphony.xwork2.ActionContext;
?
public?class?LoginAction?
{
?
//Action类公共私有变量,用来做页面导航标志
private?static?String?FORWORD=null;
?
//用户名
private?String?username;
?
//密码
private?String?password;
?
//获取用户名
public?String?getUsername()?
{
return?username;
}
?
//设置用户名
public?void?setUsername(String?username)?
{
this.username?=?username;
}
?
//获取密码
public?String?getPassword()?
{
return?password;
}
?
//设置密码
public?void?setPassword(String?password)?
{
this.password?=?password;
}
?
public?String?execute()
{
?
//JSP页面输入的值
username=getUsername();
password=getPassword();
?
//判断输入是否是空对象或者没输入
if(username!=null?&&?!username.equals("")?&&?password!=null?&&?!password.equals(""))
{
ActionContext.getContext().getSession().put("user",?username);
FORWORD="success";
}
else
{
FORWORD="input";
}
?
return?FORWORD;
}
?
?
}
Action类映射配置通过struts.xml文件来完成,具体如下:
? <action?name="Login"?class="struts.action.LoginAction">
? <result?name="input">/login.jsp</result>
? <result?name="success">/index.jsp</result>
? </action>
四、使用ActionSupport进行校验
?
如果from数据操作有误,比如输入的不是所需要的数据,或者没有输入等原因,action实例执行execute方法前会使用校验进行控制。
技术要点:
1、Action类中ActionSupport使用,以及validate方法的重写实现。
2、属性文件messageResource.properties定义,以及JSP页面上的错误信息如何显示。
3、导航结果显示。
?
代码如下EG:
LoginAction.java文件
package?struts.action;
?
import?com.opensymphony.xwork2.ActionContext;
import?com.opensymphony.xwork2.ActionSupport;
public?class?LoginAction?extends??ActionSupport
{
?
//Action类公共私有变量,用来做页面导航标志
private?static?String?FORWORD=null;
?
//用户名
private?String?username;
?
//密码
private?String?password;
?
//获取用户名
public?String?getUsername()?
{
return?username;
}
?
//设置用户名
public?void?setUsername(String?username)?
{
this.username?=?username;
}
?
//获取密码
public?String?getPassword()?
{
return?password;
}
?
//设置密码
public?void?setPassword(String?password)?
{
this.password?=?password;
}
?
public?String?execute()
{
?
//JSP页面输入的值
username=getUsername();
password=getPassword();
?
//判断输入是否是空对象或者没输入
if(username!=null?&&?!username.equals("")?&&?password!=null?&&?!password.equals(""))
{
ActionContext.getContext().getSession().put("user",?username);
FORWORD="success";
}
else
{
FORWORD="input";
}
?
return?FORWORD;
}
?
//校验方法,用来校验输入值为空或者没有输入返回错误信息
public?void?validate()
{
if(getUsername()==null?||?getUsername().trim().equals(""))
{
//返回错误信息键值,user.required包含具体内容见messageResource.properties
addFieldError("username",getText("user.required"));
}
if(getPassword()==null?||?getPassword().trim().equals(""))
{
//返回错误信息键值,user.required包含具体内容见messageResource.properties
addFieldError("password",getText("pass.required"));
}
}
}
?
Struts.properties文件
#支持本地化的资源文件名定义
struts.custom.i18n.resources=messageResource
?
messageResource.properties文件
#用key=value格式定义页面上显示的内容
user.required=请输入用户名!
pass.required=请输入密码!
?
补充,大家遇到问题有两个:
一个是struts2?标签使用异常?The?Struts?dispatcher?cannot?be?found.-----原因是web.xml配置文件有误!
另一个是字符集问题-----改变下文件的字符!(文件属性)
每天一点点希望对大家有利!