Struts2 part6:数据校验

 

1、代码校验

jsp

<%@ taglib uri="/struts-tags"  prefix="s" %>
<s:fielderror></s:fielderror>
<form action="${pageContext.request.contextPath }/demo06/validata1">
	用户名<input type="text" name="username"/><br/>
	密码<input type="password"  name="password"/><br/>
	<input type="submit" name="提交"/>
</form>

Action,多有提交到ValidateAction1的数据都需要validate()函数校验,要想单独对某个方法校验使用validateXxx()对其特定请求校验,请求先经过validateXxx()在经过validate(),通过addFieldError设置校验的回显信息

public class ValidateAction1 extends ActionSupport {
	private String username;
	private String password;
	
	@Override
	public void validate() {
		System.out.println("validate()");
		if(username==null || "".equals(username)){
			this.addFieldError("username", "用户名不能为空");
		}
		if(password==null || "".equals(password)){
			this.addFieldError("password", "密码不能为空");
		}
	}
	public void validateAdd(){
		System.out.println("validateAdd");
		if(username!=null || (username.length()>0 && username.length()<5)){
			this.addFieldError("username", "长度在0~5之间");
		}
	}
	public String add() throws Exception {
		System.out.println(username+"--"+password);
		return NONE;
	}
	
	@Override
	public String execute() throws Exception {
		System.out.println(username+"--"+password);
		return NONE;
	}

	public void setUsername(String username) {
		this.username = username;
	}

	public void setPassword(String password) {
		this.password = password;
	}

}

 strtus配置

<package name="demo06" namespace="/demo06" extends="struts-default">
		<action name="validata1" class="demo06.ValidateAction1">
			<result name="input">/demo06/validate1.jsp</result>
		</action>
	</package>

 

 2、XML配置校验

 jsp

<%@ taglib uri="/struts-tags"  prefix="s" %>
<s:fielderror></s:fielderror>
<form action="${pageContext.request.contextPath }/demo06/validata2.action">
	用户名<input type="text" name="username"/><br/>
	密码<input type="password"  name="password"/><br/>
	<input type="submit" name="提交"/>
</form>

 action,要使用xml校验,必须为属性提供setter()

public class ValidateAction2 extends ActionSupport {
	private String username;
	private String password;

	@Override
	public String execute() throws Exception {
		System.out.println(username + "--" + password);
		return NONE;
	}

	public void setUsername(String username) {
		this.username = username;
	}

	public String getUsername() {
		return this.username;
	}

	public String getPassword() {
		return this.password;
	}

	public void setPassword(String password) {
		this.password = password;
	}

}

 编写validate配置文件ValidateAction2-validation.xml,Action类名--validation.xml,dtd在xwork-core-2.3.4.jar//xwork-validator-1.0.3.dtd中,可配置的内置校验器在com.opensymphony.xwork2.validator.validators//com/opensymphony/xwork2/validator/validators/default.xml中

 

扫描二维码关注公众号,回复: 476582 查看本文章
<?xml version="1.0" encoding="UTF-8"?>
  <!DOCTYPE validators PUBLIC
  		"-//Apache Struts//XWork Validator 1.0.3//EN"
  		"http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd">

<validators>
	<field name="username">
		<field-validator type="requiredstring">
			<message><![CDATA[用户名不能为空]]></message>
		</field-validator>
	</field>
	<field name="password">
		<field-validator type="stringlength">
			<param name="maxLength">7</param>
			<param name="minLength">3</param>
			<message><![CDATA[密码长度3~7位]]></message>
		</field-validator>
	</field>
</validators>

 

struts配置

 

	<action name="validata2" class="demo06.ValidateAction2">
			<result name="input">/demo06/validate2.jsp</result>
		</action>

 可配置的校验器

required (必填校验器,要求被校验的属性值不能为null)

requiredstring (必填字符串校验器,要求被校验的属性值不能为null,并且长度大于0,默认情况下会对字符串去前后空格)

stringlength(字符串长度校验器,要求被校验的属性值必须在指定的范围内,否则校验失败,minLength参数指定最小长度,maxLength参数指定最大长度,trim参数指定校验field之前是否去除字符串前后的空格)

regex(正则表达式校验器,检查被校验的属性值是否匹配一个正则表达式,expression参数指定正则表达式,caseSensitive参数指定进行正则表达式匹配时,是否区分大小写,默认值为true)

int(整数校验器,要求field的整数值必须在指定范围内,min指定最小值,max指定最大值)

double(双精度浮点数校验器,要求field的双精度浮点数必须在指定范围内,min指定最小值,max指定最大值)

fieldexpression(字段OGNL表达式校验器,要求field满足一个ognl表达式,expression参数指定ognl表达式,该逻辑表达式基于ValueStack进行求值,返回true时校验通过,否则不通过)

email(邮件地址校验器,要求如果被校验的属性值非空,则必须是合法的邮件地址)

url(网址校验器,要求如果被校验的属性值非空,则必须是合法的url地址)

date(日期校验器,要求field的日期值必须在指定范围内,min指定最小值,max指定最大值)

conversion(转换校验器,指定在类型转换失败时,提示的错误信息)

visitor(用于校验action中复合类型的属性,它指定一个校验文件用于校验复合类型属性中的属性)

 expression(OGNL表达式校验器,它是一个非字段校验器, expression参数指定ognl表达式,该逻辑表达式基于ValueStack进行求值,返回true时校验通过,否则不通过,该校验器不可用在字段校验器风格的配置中)

 

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC
  		"-//Apache Struts//XWork Validator 1.0.3//EN"
  		"http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd">
<validators>
	<field name="name">
		<field-validator type="requiredstring">
			<message>客户姓名不能为空!</message>
		</field-validator>
	</field>
	<field name="password">
		<field-validator type="requiredstring">
			<message>密码不能为空!</message>
		</field-validator>
		<field-validator type="stringlength">
			<param name="minLength">6</param>
			<message>密码长度不能小于6位</message>
		</field-validator>
	</field>
	<field name="repassword">
		<field-validator type="fieldexpression">
			<param name="expression">
				<![CDATA[(password==repassword)]]>
			</param>
			<message>两次密码输入不一致</message>
		</field-validator>
	</field>
	<field name="age">
		<field-validator type="int">
			<param name="min">18</param>
			<param name="max">70</param>
			<message>客户年龄必须在18到70之间</message>
		</field-validator>
	</field>
	<field name="birthday">
		<field-validator type="date">
			<param name="min">1980-10-10</param>
			<param name="max">2050-10-10</param>
			<message>生日必须在指定范围!</message>
		</field-validator>
	</field>
	<field name="phone">
		<field-validator type="regex">
			<param name="expression">
				<![CDATA[^18\d{9}$]]>
			</param>
			<message>手机号必须18开头!</message>
		</field-validator>
	</field>
	<field name="email">
		<field-validator type="email">
			<message>邮箱格式非法!</message>
		</field-validator>
	</field>
</validators>  		

 

针对于特定方法的校验

Action类名-ActionName(<action>元素name属性)-validation.xml 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

猜你喜欢

转载自mvplee.iteye.com/blog/2240583
今日推荐