Struts2 验证

Struts2验证机制

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

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

addFieldError()

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

Struts2验证工作原理

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

在struts2中,我们可以实现对action的所有方法进行校验或者对action的指定方法进行校验,校验失败将会自动跳转到input。

对于输入校验struts2提供了两种实现方法:

1. 采用手工编写代码实现(validate()和validateXxx())。

创建一个jsp登录页面

<form action="${pageContext.request.contextPath}/login.action"method="post">

用户名:<input type="text"name="name"/><br>

密码:<input type="text"name="pass"/><br>

<input type="submit"value="确定"/>

</form>

去struts.xml文件中声明

<action name="login"class="cn.csdn.action.LoginAction"method="login">

<result name="input">/WEB-INF/error.jsp</result>

<result>/index.jsp</result>

</action>

LoginAction.java文件:

privateString name;

privateString pass;

publicString getName() {

returnname;

}

public voidsetName(String name) {

this.name = name;

}

publicString getPass() {

returnpass;

}

public voidsetPass(String pass) {

this.pass = pass;

}

publicLoginAction() {

super();

//TODOAuto-generatedconstructor stub

}

//进行校验

写了validate方法之后,会对所有的方法都进行校验

public voidvalidate (){

if("".equals(name) || name==null){

//添加错误信息

this.addFieldError("msg", "用户名称不能为空");

}

if("".equals(pass) || pass==null){

//添加错误信息

this.addFieldError("msg", "密码不能为空");

}

}


写了validateLogin方法之后,对固定方法进行校验,只会对login方法进行验证

public void validateLogin(){

if("".equals(name) || name==null){

//添加错误信息

this.addFieldError("msg", "用户名称不能为空");

}

if("".equals(pass) || pass==null){

//添加错误信息

this.addFieldError("msg", "密码不能为空");

}

}


publicString login()throwsException {

//TODOAuto-generatedmethod stub

System.out.println("进行业务登录操纵的处理.......");

returnSUCCESS;

}

publicString query()throwsException {

//TODOAuto-generatedmethod stub

System.out.println("进行业务查询操纵的处理.......");

returnSUCCESS;

}

error.jsp

<!--struts2的标签库 首先必须引入struts2的标签库 -->

<%@taglib uri="/struts-tags"prefix="s"%>

在body中写入

<s:fielderror></s:fielderror>即可

2. 基于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>

<field name="name">

<field-validator type="stringlength">

<param name="trim">true</param>

<param name="minLength">20</param>

<param name="maxLength">30</param>

<message>长度必须在20-30之间</message>

</field-validator>

</field>

<field name="pass">

<field-validator type="regex">

<param name="trim">true</param>

<param name="caseSensitive">true</param>

<param name="expression"> <![CDATA[(\w{4,15})]]> </param>

<message>必须是字符和数组的组合并且长度是4-15之间</message>

</field-validator>

</field>

</validators>


你可能感兴趣的:(struts2)