利用spring-modules验证框架进行表单验证

本文介绍如何使用 Spring Modules 验证框架进行表单验证,包括必要的 jar 文件配置、XML 文件配置示例及国际化资源文件使用方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

网上关于spring-modules框架验证的资料很少,因为在项目中用到spring mvc,唯有对此熟悉下,下面只做一些简单的验证,如果熟悉struts1.x验证框架的话就好办了!

利用spring-modules进行表单验证,其他的配置跟实现spring Validator接口编程式验证差不多(参考实现Spring Validator接口进行编程式验证例子)

创建项目时需要加入spring-modules-validation.jar和commons-*.jar的一系列jar文件(commons-validator.jar,commons-logging-*.jar,commons-lang.jar,commons-collections.jar,commons-digester.jar,commons-beanutils.jar,antlr-*.jar),我是在应用启动时根据错误信息一个一个的加进去的

跟编程式不同的是spring-modules为我们提供了验证工厂,我们可以通过该工厂获得验证类,我们不需要手动创建,因此我们只需要在配置文件配置就行了
配置如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:lang="http://www.springframework.org/schema/lang"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
http://www.springframework.org/schema/lang http://www.springframework.org/schema/lang/spring-lang-2.0.xsd">

<!-- 从资源文件读取信息 -->
<bean id="messageSource"
class="org.springframework.context.support.ResourceBundleMessageSource">
<property name="basenames" value="messages" />
</bean>

<!-- 处理器映射 -->
<bean id="handlerMapping"
class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<property name="mappings">
<props>
<prop key="register.htm">registerController</prop>
</props>
</property>
</bean>

<!-- 请求参数解析 -->
<bean id="paramResolver"
class="org.springframework.web.servlet.mvc.multiaction.ParameterMethodNameResolver">
<property name="paramName" value="action" />
</bean>

<!-- 视图解析器 -->
<bean id="viewResolver"
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/pages/" />
<property name="suffix" value=".jsp" />
</bean>

<!-- 配置验证工厂 -->
<bean id="validatorFactory"
class="org.springmodules.validation.commons.DefaultValidatorFactory">
<property name="validationConfigLocations">
<list>
<value>/WEB-INF/validator-rules.xml</value>
<value>/WEB-INF/validation.xml</value>
</list>
</property>
</bean>

<bean id="validator"
class="org.springmodules.validation.commons.DefaultBeanValidator">
<property name="validatorFactory" ref="validatorFactory" />
</bean>


<bean id="registerController"
class="com.test.controller.UserController">
<property name="commandName" value="user" />
<property name="commandClass" value="com.test.vo.User" />
<property name="formView" value="index" />
<property name="successView" value="success" />
<property name="validator" ref="validator" />
</bean>

</beans>

validator-rules.xml可以从struts1.x包中或者在网上下载得到
validation.xml是我们定义的验证规则,配置如下所示

<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE form-validation PUBLIC
"-//Apache Software Foundation//DTD Commons Validator Rules Configuration 1.3.0//EN"
"http://jakarta.apache.org/commons/dtds/validator_1_3_0.dtd">

<form-validation>
<formset>
<!-- name属性必须指定,并且此名称与User类名称一致!开头为小写 -->
<form name="user">
<field property="username"
depends="required,minlength,maxlength">
<!-- msg标签用于覆盖资源文件的内容,name用户指验证规则,key与资源文件的属性名一致 -->
<msg name="required" key="username.required"/>
<msg name="minlength" key="username.minlength"/>
<msg name="maxlength" key="username.maxlength"/>
<!-- arg标签用于向资源文件传递参数,position用于指定参数的位置,key用于指定传递的值 -->
<arg name="minlength" position="0" key="${var:minlength}"/>
<arg name="maxlength" position="0" key="${var:maxlength}"/>
<var>
<var-name>minlength</var-name>
<var-value>6</var-value>
</var>
<var>
<var-name>maxlength</var-name>
<var-value>20</var-value>
</var>
</field>
<field property="password"
depends="required,minlength,maxlength">
<msg name="required" key="password.required"/>
<msg name="minlength" key="password.minlength"/>
<msg name="maxlength" key="password.maxlength"/>
<var>
<var-name>minlength</var-name>
<var-value>6</var-value>
</var>
<var>
<var-name>maxlength</var-name>
<var-value>20</var-value>
</var>
</field>
</form>
</formset>
</form-validation>


接着需要创建国际化资源文件
message_zh_CN.properties

username.required=\u6237\u540D\u4E0D\u80FD\u4E3A\u7A7A\!(用户名不能为空!)
username.minlength=\u7528\u6237\u540d\u957f\u5ea6\u4e0d\u5c0f\u4e8e{0}\u4f4d!(用户名长度不小于6位!)
username.maxlength=\u7528\u6237\u540d\u957f\u5ea6\u4e0d\u80fd\u5927\u4e8e{0}\u4f4d!(用户名长度不能大于20位!)

password.required=\u5bc6\u7801\u4e0d\u80fd\u4e3a\u7a7a!(密码不能为空!)
password.minlength=\u5BC6\u7801\u957F\u5EA6\u4E0D\u5C0F\u4E8E6\u4F4D\!(密码长度不小于6位!)
password.maxlength=\u5BC6\u7801\u957F\u5EA6\u4E0D\u80FD\u5927\u4E8E20\u4F4D\!(密码长度不能大于20位!)

当用户提交表单时,如果出现错误,在页面中使用<spring:bind path="user.username">输出相应用错误信息!

有一个最值得注意的问题是:[color=red]validation.xml文件中<form name=
"user">标签中的name属性值必须跟类名(User)一样,并且以小写字母开头[/color]
为了避免错误,建议commandName的值,验证文件中<form>标签中的name属性值跟类名称保持一致!!不过名称是以小写开头!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值