`

Struts2 自定义validator 防止页面提交的list值重复

    博客分类:
  • web
阅读更多
最近做小项目的时候,由于页面上有许多list,提交上来后,要将list中所有对象都保存至数据库。如果list中对象主键有重复的话,那么主键冲突就保存不了,因此对这种情况应该进行验证。

struts2的验证框架可谓是非常优雅,但无奈默认提供的validators中没有满足这种需求的validator,因此需要进行扩展。

对于扩展struts2 validator框架的介绍有很多,例如:
http://developer.51cto.com/art/201103/251944.htm
在此就不重复介绍了


首先是我们自定义的validator
package com.zyl.eduInfoStat.validator;

import java.util.HashSet;
import java.util.List;
import java.util.Set;

import com.opensymphony.xwork2.validator.ValidationException;
import com.opensymphony.xwork2.validator.validators.FieldValidatorSupport;
import com.zyl.eduInfoStat.model.help.ListValidateAble;

public class ListRepeatValidator extends FieldValidatorSupport {

	@SuppressWarnings("unchecked")
	@Override
	public void validate(Object o) throws ValidationException {
		// TODO Auto-generated method stub
		String listName = getFieldName();
		List<ListValidateAble> list = (List<ListValidateAble>) this
				.getFieldValue(listName, o);
		Set<String> set = new HashSet<String>();
		for (ListValidateAble lva : list) {
			if (set.contains(lva.getStrForValidate())) {
				addFieldError(listName, o);
				return;
			}
			set.add(lva.getStrForValidate());
		}
	}

}


这段代码就是验证list内容重不重复的主要逻辑,非常简便,其中ListValidateAble是一个接口,所有需要这个验证器验证的对象都需要implements这个接口。这个接口定义非常简单:
package com.zyl.eduInfoStat.model.help;

public interface ListValidateAble {
	public String getStrForValidate();

}


之所以定义这个接口,是为了将自定义的ListRepeatValidator具有普适性.只要list中的对象是扩展了这个接口的,都可以用ListRepeatValidator验证。
如:
package com.zyl.eduInfoStat.model;

import java.io.Serializable;

import com.zyl.eduInfoStat.model.help.ListValidateAble;

public class EquipInfo_trainRoom implements Serializable ,ListValidateAble{
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	/**
	 * 在表中的序号,用于保持显示顺序
	 */
	private int i;
	private String schoolName;
	private String roomName;
	

	public String getSchoolName() {
		return schoolName;
	}

	public void setSchoolName(String schoolName) {
		this.schoolName = schoolName;
	}

	public String getRoomName() {
		return roomName;
	}

	public void setRoomName(String roomName) {
		this.roomName = roomName;
	}

	public int getI() {
		return i;
	}

	public void setI(int i) {
		this.i = i;
	}

	@Override
	public String getStrForValidate() {
		// TODO Auto-generated method stub
		return schoolName;
	}
}





接下来是validators.xml,我们需要将这个文件放到classpath的根目录下。
<?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="required" class="com.opensymphony.xwork2.validator.validators.RequiredFieldValidator"/>
    <validator name="requiredstring" class="com.opensymphony.xwork2.validator.validators.RequiredStringValidator"/>
    <validator name="int" class="com.opensymphony.xwork2.validator.validators.IntRangeFieldValidator"/>
    <validator name="long" class="com.opensymphony.xwork2.validator.validators.LongRangeFieldValidator"/>
    <validator name="short" class="com.opensymphony.xwork2.validator.validators.ShortRangeFieldValidator"/>
    <validator name="double" class="com.opensymphony.xwork2.validator.validators.DoubleRangeFieldValidator"/>
    <validator name="date" class="com.opensymphony.xwork2.validator.validators.DateRangeFieldValidator"/>
    <validator name="expression" class="com.opensymphony.xwork2.validator.validators.ExpressionValidator"/>
    <validator name="fieldexpression" class="com.opensymphony.xwork2.validator.validators.FieldExpressionValidator"/>
    <validator name="email" class="com.opensymphony.xwork2.validator.validators.EmailValidator"/>
    <validator name="url" class="com.opensymphony.xwork2.validator.validators.URLValidator"/>
    <validator name="visitor" class="com.opensymphony.xwork2.validator.validators.VisitorFieldValidator"/>
    <validator name="conversion" class="com.opensymphony.xwork2.validator.validators.ConversionErrorFieldValidator"/>
    <validator name="stringlength" class="com.opensymphony.xwork2.validator.validators.StringLengthFieldValidator"/>
    <validator name="regex" class="com.opensymphony.xwork2.validator.validators.RegexFieldValidator"/>
    <validator name="conditionalvisitor" class="com.opensymphony.xwork2.validator.validators.ConditionalVisitorFieldValidator"/>
    
    
    <!-- 自定义的验证器 -->
     <validator name="listRepeat" class="com.zyl.eduInfoStat.validator.ListRepeatValidator"/>
</validators>
<!--  END SNIPPET: validators-default -->


我们自定义的ListRepeatValidator在最下方,上方是系统默认提供的验证器。

最后是action的配置,如EquipInfoSubmitAction-validation.xml
<?xml version="1.0" encoding="UTF-8"?>
<!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="equipInfo_trainRoom_list">
    	<field-validator type ="listRepeat" > 
            <message>值不能重复!</message>   
        </field-validator > 
    </field>
</validators>   



如此便大功告成了!


PS.
写代码一有问题,便是上网搜,解决了无数的问题。想着咱也必须贡献一点力啊~
分享到:
评论

相关推荐

    struts自定义Validator示例

    struts中自定义validator验证 &lt;br&gt;很多时候需要验证“密码”与“重复密码”是否一致,如果放在服务器端验证就浪费资源了。 如何在客户端进行验证呢?JS可以实现,但是struts的validator框架是否能实现呢?-见...

    struts验证器validator使用,以及自定义验证器

    自定义验证器需要实现`org.apache.struts2.validator.FieldValidator`接口,重写`validate()`方法。然后在`validation.xml`中指定自定义验证器类型。 例如,创建一个检查邮箱格式的自定义验证器: ```java public ...

    Struts2自定义校验框架

    要创建一个自定义校验器,需要继承`org.apache.struts2.validator.FieldValidatorSupport`类或者实现`org.apache.struts2.validator.Validator`接口。然后在自定义校验器中重写`validate()`方法,实现具体的校验逻辑...

    Struts1的validator验证框架

    Struts1的Validator框架主要负责在提交表单前对用户输入进行校验,确保数据的有效性和安全性。它支持多种验证方式,包括内置验证规则和自定义验证逻辑,可以满足复杂的应用需求。 #### 二、Validator框架的组成部分...

    自定义 validate验证 struts1框架

    1. **创建Validator ActionForm**:在Struts1中,表单数据通常是通过ActionForm对象来接收的。为了实现自定义验证,你需要创建一个继承自Struts1提供的`ActionForm`类的子类,并在这个子类中定义你所需的字段。 2. ...

    struts中使用validator验证框架

    6. **Integration with Struts Controller**:Validator框架与Struts控制器紧密集成,当验证失败时,控制器会阻止业务逻辑的执行,转而返回错误页面。 总结来说,Struts中的Validator框架提供了一种强大的方式来...

    03_张孝祥09年Struts视频_validator单元3.rar

    这个“03_张孝祥09年Struts视频_validator单元3.rar”压缩包可能包含了张孝祥老师2009年讲解Struts框架中关于Validator验证器的系列教学视频。Validator是Struts框架的一部分,主要负责处理用户输入数据的验证。 在...

    整合了struts2 jquery的formValidator表单验证的页面代码

    6. **Struts2 Action处理**:在后台,Struts2 Action会接收到Ajax请求,对提交的数据进行校验,如果一切正常,可以进行业务逻辑处理,如保存用户信息,否则返回错误信息。 7. **反馈结果**:最后,前端根据Ajax请求...

    Struts的Validator-rules详解

    8. **整合Struts2**:尽管这里讨论的是Struts1的Validator-rules,但在Struts2中,验证机制已经进化为更强大的Struts2 Validation,它提供了更灵活的注解式验证和更丰富的验证选项。 总的来说,Struts的Validator-...

    struts2 自定义验证程序的实现方法详解

    为了实现自定义的验证器,首先需要继承或实现 Struts2 的 Validator 接口。该接口定义了一些基本的方法,用于处理验证过程中的各种逻辑。例如,下面展示了这个接口的基本结构: ```java public interface Validator...

    struts2自定义数据类型转换练习

    当用户提交表单数据时,Struts2会通过ActionContext获取到这些数据,并尝试将其转换为Action类中相应字段的类型。如果内置的转换器无法完成转换,例如,字符串转换为自定义类型的对象,我们就需要自定义一个类型转换...

    Struts2-plus.rar_plus_struts2 plus_struts2 validator _strutsplus

    Struts2 Validator是Struts2中用于处理用户输入数据验证的组件,它允许开发者定义一组规则来检查用户提交的数据是否合法。通过Struts2 Plus,这个过程变得更加直观和高效,减少了开发者编写验证逻辑的时间和复杂性。...

    struts validator验证框架项目

    验证结果可以在JSP页面中通过Struts提供的自定义标签库展示。例如,`&lt;html:errors&gt;`标签可以显示所有验证错误,而`&lt;html:messages&gt;`则可以显示特定字段的错误信息。这样,用户可以直观地看到输入的问题所在。 5. *...

    struts 的validator框架验证

    Struts的Validator框架是Java Web开发中用于处理用户输入验证的一种强大的工具,它与MVC架构中的控制器层紧密结合,提供了一种便捷的方式来确保用户提交的数据符合预设的业务规则。这个框架大大简化了数据验证的过程...

    struts1.3实现的Validator简单验证

    在Struts1.3中,Validator的主要目标是减少程序员编写验证逻辑的工作量,通过配置文件和自定义验证规则实现。这使得应用程序可以更加灵活地处理用户输入,并提供友好的错误提示。下面我们将详细介绍Struts1.3中...

    struts2用户登录实例的validator后台校验

    此外,Struts2的Validator还支持自定义验证器,如果内置的验证规则无法满足需求,可以通过实现`Validator`接口或使用`ValidatorRule`来创建自定义的验证逻辑。 在实际应用中,为了增强安全性,通常会结合Spring ...

    Struts2 使用Validation框架验证数据(三十七)

    它允许开发者定义验证规则,这些规则会在用户提交表单后被应用,从而防止无效或不合法的数据进入系统。Validation框架通过XML配置文件和注解来定义验证规则。 二、XML验证配置 在Struts2中,数据验证通常通过`...

    struts1.x validator框架验证入门例子

    自定义验证器需要实现org.apache.struts.validator.Validator接口,并在ValidatorRule.xml中引用。 五、错误处理 当验证失败时,Struts会将错误信息添加到ActionErrors集合中。在JSP页面中,可以通过logic:errors...

    Struts Validator验证框架详细讲解.txt

    相比于Struts内置的ActionForm Bean验证方式,Struts Validator提供了更灵活、更强大的验证功能,能够处理复杂的验证逻辑,并且可以与Spring和Hibernate等其他框架无缝集成,形成完整的Struts2 + Spring + Hibernate...

    struts1.x使用common-validator验证框架

    5. **处理请求**:当用户提交表单时,Struts框架会调用Validator插件来执行验证。如果验证失败,Struts会将错误信息存储在ActionForm中,然后重定向回表单页面并显示错误信息。 6. **显示错误信息**:在JSP页面上,...

Global site tag (gtag.js) - Google Analytics