在一个老的项目中添加功能,发现系统使用的spring validate机制。
因为没使用过这个功能,照着配置一边发现错误。
所以去百度了一些spring validate配置的资料。
记录配置步骤如下:
1、validator.xml添加需要验证的对于实体类的配置。Form的name属性值应该是实体类名这样统一。
<formname="BeanClass">
<field property="name" depends="required, maxlength,isNameExist">
<var>
<var-name>maxlength</var-name>
<var-value>1最大长度</var-value>
</var>
<arg position="0" key="属性名称"/>
<arg position="1" key="最大长度值多少"/>
</field>
</form>
2、配置Application.xml
(1) 服务器和客户端验证
<!--commons-validate 服务器和客户端验证 -->
<bean id="validatorFactory"class="org.springmodules.validation.commons.DefaultValidatorFactory">
<propertyname="validationConfigLocations">
<list>
<value>classpath:validator-rules.xml</value>
<value>classpath:validator.xml</value>
</list>
</property>
</bean>
<bean id="beanValidator"class="org.springmodules.validation.commons.DefaultBeanValidator">
<propertyname="validatorFactory" ref="validatorFactory"/>
</bean>
(2)模块对应的Controller,必须注入beanValidator
<beanid="*Controller" class="*.*.*">
<property name="*Mgr">
<ref bean="对应管理类beanID"/>
</property>
<!--这里使用的是sessionForm ,有的地方使用的是<propertyname="commandName" value="userCommand"/> 因为我们项目是这样使用的所以统一配置->
<property name="sessionForm"value="true" />
<property name="commandClass" value="com.test.BeanClass"/>
<property name="validator"ref="beanValidator" />
<property name="formView" value="edit.jsp" />
<property name="successView" value="success.jsp" />
</bean>
3、配置edit.jsp,在jsp加入如下标签。BeanClass的名称要和commandClass的name一致,也要和validate.xml中得form的name属性一致,如BeanClass
<scripttype="text/javascript" src="<c:urlvalue="/js/validator.jsp"/>"></script>
<validator:javascript formName="BeanClass"staticJavascript="false" />
<%@ page language="java"contentType="javascript/x-javascript" %>
<%@ taglib prefix="validator"uri="http://www.springmodules.org/tags/commons-validator"%>
<validator:javascriptdynamicJavascript="false" staticJavascript="true"/>
在输入栏后加入显示错误信息方法
<form:input path="sign" /> <font color="red">*</font>
<font color="red"><form:errors path="sign"/></font>
4、如果需要检查实体属性是否重合需要在实体类中加入方法isNameRepeat
public boolean isNameRepeat(ValidatorAction va, Field field, Errorserrors) {
if("name".equalsIgnoreCase(field.getKey())) {
Collectioncoll = HibernateUtil.find("from BeanClass a" +
"where a.name= '"+this.getName()+"' and a.id !=" + this.getId());
if(!coll.isEmpty()){
FieldChecks.rejectValue(errors,field, va);
returnfalse;
}
}
SPring不是很熟,如果有错请不吝赐教