为登录页面的表单添加验证功能 验证的逻辑是: 用户名和密码不能为空
按照下面四步添加验证功能
配置登录表单验证器
为loginAction指定验证器
创建验证器类
修改login.jsp绑定数据验证
1 配置登录表单验证器
首先在applicationContext.xml中添加一个登录验证器 名称为loginValidator 指向的类为
- <bean id="loginValidator"
- class="com.demo.spring.validator.LoginValidator"/>
2 为loginAction指定验证器
然后为用户登录处理器loginAction指定上一步中配置的表单验证器
- <!---定义Action-->
- <bean id="loginAction"
- class="com.demo.spring.actions.LoginAction">
- <property name="commandClass">
- <value>com.demo.spring.forms.LoginForm</value>
- </property>
- <!-- 指定验证类 -->
- <property name="validator">
- <ref local="loginValidator" />
- </property>
- <!-- 指定失败要返回的页面 -->
- <property name="formView">
- <value>login</value>
- </property>
- <!-- 指定成功要返回的页面 -->
- <property name="successView">
- <value>welcome</value>
- </property>
- </bean>
3 创建验证器类com.demo.spring.validator.LoginValidator.java
该类实现了Spring的Validator 添加一个函数validate()来执行验证的逻辑
在validate()函数中 包含了两个输入参数变量
第一个变量obj表示输入的表单对象
第二个对象errors表示Spring错误对象
通过这两个变量可以与外界进行交互 在该函数中包含下面几个部分
通过强制类型转换 将obj转换为loginForm对象
检查如果用户名为空 则在errors中添加一个错误信息username 并引用资源文件中的变量login.error.username rejectValue()函数的最后一个参数为找不到资源文件变量时的默认值
检查如果密码为空 则在errors中添加一个错误信息password 并引用资源文件中的变量login.error.password rejectValue()函数的最后一个参数为找不到资源文件变量时的默认值
完整的代码是
- package com.demo.spring.validator;
- import org.springframework.validation.Errors;
- import org.springframework.validation.Validator;
- import com.demo.spring.forms.LoginForm;
- public class LoginValidator implements Validator {
- public boolean supports(Class obj) {
- return LoginForm.class.isAssignableFrom(obj);
- }
- public void validate(Object obj, Errors errors) {
- LoginForm loginForm = (LoginForm) obj;
- if (loginForm.getUsername().length() == 0) {
- errors.rejectValue("username", "login.error.username", null,
- "用户名不能为空!");
- }
- if (loginForm.getPassword().length() == 0) {
- errors.rejectValue("password", "login.error.password", null,
- "密码不能为空!");
- }
- }
- }
4 修改login.jsp 绑定验证数据
在上面的错误信息中 添加了两个资源引用的标签 我们在ApplicationResources_temp.properties中添加如下两个标签
- #loginForm
- login.error.username = 用户名不能为空
- login.error.password = 密码不能为空
并使用命令native2ascii转换更新到ApplicationResources_zh_CN.properties 同样的 也需要在ApplicationResources.properties中添加英文的标签
然后再JSP页面login.jsp中输出这两个错误信息 在用户名和密码的文本框后各添加一个标签 文本框的name属性和value属性分别为${status.expression}和${status.value}表示 并在文本框后输出错误信息提示${status.errorMessage}
- <form name="form1" action="login.do" method="post">
- <table width="300" border="1">
- <tr>
- <td colspan="2"><spring:message code="login.page.title" /></td>
- </tr>
- <tr>
- <spring:bind path="command.username">
- <td><spring:message code="login.page.username" /></td>
- <td><input type="text" name="${status.expression }"
- value="${status.value }" /> <font color="red">${status.errorMessage
- }</font></td>
- </spring:bind>
- </tr>
- <tr>
- <spring:bind path="command.password">
- <td><spring:message code="login.page.password" /></td>
- <td><input type="password" name="${status.expression }"
- value="${status.value }" /> <font color="red">${status.errorMessage
- }</font></td>
- </spring:bind>
- </tr>
- </table>
- </form>
完成以上几步之后 在不输入用户名和密码的情况下点击登录按钮 此时会在用户名和密码的文本框后面显示两个错误提示信息
注意:此时访问首页面的时候需要输入地址login.do 而不是login.jsp了 因为此时login.jsp页面中已经增加了Spring的标签 改标签引用了command属性 即用户的登录表单LoginForm类 通过访问login.do就会通过LoginAction缓存了用户登录的表单 如果直接访问login.jsp 就没有该表单缓存 就会出错了
阅读(7599) | 评论(0) | 转发(0) |