struts2 字段、非字段验证,自定义验证


    字段验证:  判断某个字段属性的输入是否有效
   非字段验证:  不只针对某个字段,而是针对多个字段的输入值之间的逻辑关系进行校验。

index.jsp

<%@taglib uri="/struts-tags" prefix="s"%>
    
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<s:form action="testValidate">
<s:textfield name="age" label="age"></s:textfield>
<s:textfield name="reage" label="reage"></s:textfield>
<s:textfield name="idcare" label="id"></s:textfield>
<s:submit></s:submit>
</s:form>
</body>
</html>

ValidateAction.java
ActionSupport  类已经实现了Validateable 接口

package com.oracle.va;


import com.opensymphony.xwork2.ActionSupport;

public class ValidateAction extends ActionSupport{

	private static final long serialVersionUID = 1L;
	private int age;
	private int reage;
	private String idcare;
	
	
	public int getReage() {
		return reage;
	}


	public void setReage(int reage) {
		this.reage = reage;
	}


	public String getIdcare() {
		return idcare;
	}


	public void setIdcare(String idcare) {
		this.idcare = idcare;
	}


	public int getAge() {
		return age;
	}


	public void setAge(int age) {
		this.age = age;
	}


	public String execute(){
		return SUCCESS;
	}

}
ValidateAction-validation.xml
<!DOCTYPE validators PUBLIC
        "-//Apache Struts//XWork Validator 1.0.2//EN"
        "http://struts.apache.org/dtds/xwork-validator-1.0.2.dtd">

<validators>
	<field name="age">
		<field-validator type="int" short-circuit="false">
			<param name="min">20</param>
			<param name="max">50</param>
			<message>age 在${min} 和 ${max}之间</message>
		</field-validator>
	</field>

 	<field name="reage"> 
 		<field-validator type="fieldexpression"> 

 			<param name="expression"><![CDATA[(age==reage)]]></param>
 		<message>age 和reage 不一致</message>
 		</field-validator>
 	</field>

<!-- 	自定义验证 ,idcare长度限制 -->
	<field name="idcare">
		<field-validator type="idcare">
			<param name="length">18</param>
			<message>idcare 的长度大于18</message>
		</field-validator>
	</field>

</validators>

在上面的 age和reage的就是必须一致,才能通过验证的方式是属于 字段验证

非字段验证的写法是::
<validator type="fieldexpression">
		<param name="fieldName">age</param>
		<param name="fieldName">reage</param>
		<param name="expression"><![CDATA[(age==reage)]]></param>
		<message>age 和reage 不一致</message>
	</validator>

还有一个不为空验证常用::
<validator type="requiredstring">
        <param name="fieldName">name</param>
        <param name="trim">true</param>
 
        <message>name不为空</message>
    </validator>



自定义验证器

–若需要普通的验证程序, 可以继承ValidatorSupport 类
–若需要字段验证程序, 可以继承FieldValidatorSupport 类

IDcardValidate.java
package com.oracle.va;

import com.opensymphony.xwork2.validator.FieldValidator;
import com.opensymphony.xwork2.validator.ValidationException;
import com.opensymphony.xwork2.validator.validators.FieldValidatorSupport;

public class IDcardValidate extends FieldValidatorSupport {
	private int length;//长度限制参数
	

	public int getLength() {
		return length;
	}


	public void setLength(int length) {
		this.length = length;
	}


	@Override
	public void validate(Object arg0) throws ValidationException {
		// TODO Auto-generated method stub
		ValidateAction v=(ValidateAction)arg0;
		if(v.getIdcare().length()>this.getLength()){

			addFieldError(getFieldName(), arg0);
		}
	}

}

自定义验证器的配置文件
       自定义验证器需要在类路径里的某个validators.xml 文件里注册验证框架首先在根目录下找validators.xml文件,没找到validators.xml文件, 验证框架将调用默认的验证设置,default.xml里面的配置信息.


validators.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC
        "-//Apache Struts//XWork Validator Definition 1.0//EN"
        "http://struts.apache.org/dtds/xwork-validator-definition-1.0.dtd">

<!-- START SNIPPET: validators-default -->
<validators>
    <validator name="idcare" class="com.oracle.va.IDcardValidate"/>
</validators>
<!--  END SNIPPET: validators-default -->



  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值