1、 进行必要的格式检查

2、 防止非法数据进入业务系统,保证系统数据的完整

Struts2验证机制

Action组件要求实现Validateable接口,覆盖其validate()方法,编写有关验证代码

还要实现ValidationAware接口,该接口提供了添加错误消息的方法

addFieldError()

一般继承ActionSupport类,其实现了上述接口。

Struts2验证工作原理

workflow拦截器首先检查Action组件是否实现接口Validateable,如果实现,则调用其validate()进行验证,在验证中如果发现非法数据则创建错误消息并通过ValidationAware接口中方法存放该错误消息。当validate()执行完毕,workflow拦截器还要接着调用ValidationAware的hasErrors()方法,看是否有任何验证失败消息。如果有,则终止Action的执行而返回input结果。

 

在struts2中,我们可以实现对action的所有方法进行校验或者对action的指定方法进行校验。

两种实现方法:

1.       采用手工编写代码实现。

创建一个jsp登录页面

"${pageContext.request.contextPath}/login.action" method="post">
"text" name="name"/><br>
"text" name="pass"/><br>
"submit" value="确定"/>
</form>

去struts.xml文件中声明
"login"class="cn.csdn.action.LoginAction" method="login">
"input">/WEB-INF/error.jsp</result>
<result>/index.jsp</result>
</action>
LoginAction.java文件:
private
private
public
return
}
public void
this.name = name;
}
public
return
}
public void
this.pass = pass;
}
public
super();
TODO
}

//进行校验
//写了validate方法之后,会对所有的方法都进行校验
public void
if("".equals(name) || name==null){
//添加错误信息
this.addFieldError("msg", "用户名称不能为空");
}
if("".equals(pass) || pass==null){
//添加错误信息
this.addFieldError("msg", "密码不能为空");
}
}
public String login() throws
TODO
out.println("进行业务登录操纵的处理.......");
return SUCCESS;
}

error.jsp
<!--struts2的标签库 首先必须引入struts2的标签库 -->
"/struts-tags"prefix="s"
在body中写入
<s:fielderror></s:fielderror>即可


. 基于XML配置方式实现。
在上述基础上,添加一个xml文件
LoginAction-validation.xml
<!DOCTYPE validators PUBLIC
"-//ApacheStruts//XWork Validator 1.0.3//EN"
"http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd">
<validators>
"name">
"stringlength">
"trim">true</param>
"minLength">20</param>
"maxLength">30</param>
<message>长度必须在20-30之间</message>
</field-validator>
</field>
"pass">
"regex">
"trim">true</param>
"caseSensitive">true</param>
"expression"> <![CDATA[(\w{4,15})]]> </param>
<message>必须是字符和数组的组合并且长度是4-15之间</message>
</field-validator>
</field>
</validators>