Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2314105
  • 博文数量: 252
  • 博客积分: 5472
  • 博客等级: 大校
  • 技术积分: 3107
  • 用 户 组: 普通用户
  • 注册时间: 2011-09-17 18:39
文章分类

全部博文(252)

文章存档

2012年(96)

2011年(156)

分类: Java

2012-01-05 17:31:00

为登录页面的表单添加验证功能 验证的逻辑是: 用户名和密码不能为空
 
按照下面四步添加验证功能
 
配置登录表单验证器
为loginAction指定验证器
创建验证器类
修改login.jsp绑定数据验证
 
1  配置登录表单验证器
首先在applicationContext.xml中添加一个登录验证器 名称为loginValidator 指向的类为
  1. <bean id="loginValidator"
  2. class="com.demo.spring.validator.LoginValidator"/>
2  为loginAction指定验证器
然后为用户登录处理器loginAction指定上一步中配置的表单验证器
  1. <!---定义Action-->
  2.     <bean id="loginAction"
  3.         class="com.demo.spring.actions.LoginAction">
  4.         <property name="commandClass">
  5.             <value>com.demo.spring.forms.LoginForm</value>
  6.         </property>
  7.         <!-- 指定验证类 -->
  8.         <property name="validator">
  9.             <ref local="loginValidator" />
  10.         </property>
  11.         <!-- 指定失败要返回的页面 -->
  12.         <property name="formView">
  13.             <value>login</value>
  14.         </property>
  15.         <!-- 指定成功要返回的页面 -->
  16.         <property name="successView">
  17.             <value>welcome</value>
  18.         </property>
  19.     </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()函数的最后一个参数为找不到资源文件变量时的默认值
完整的代码是
  1. package com.demo.spring.validator;

  2. import org.springframework.validation.Errors;
  3. import org.springframework.validation.Validator;

  4. import com.demo.spring.forms.LoginForm;

  5. public class LoginValidator implements Validator {

  6.     public boolean supports(Class obj) {
  7.         return LoginForm.class.isAssignableFrom(obj);
  8.     }

  9.     public void validate(Object obj, Errors errors) {
  10.         LoginForm loginForm = (LoginForm) obj;
  11.         if (loginForm.getUsername().length() == 0) {
  12.             errors.rejectValue("username", "login.error.username", null,
  13.                     "用户名不能为空!");
  14.         }
  15.         if (loginForm.getPassword().length() == 0) {
  16.             errors.rejectValue("password", "login.error.password", null,
  17.                     "密码不能为空!");
  18.         }
  19.     }
  20. }

4  修改login.jsp  绑定验证数据

在上面的错误信息中 添加了两个资源引用的标签 我们在ApplicationResources_temp.properties中添加如下两个标签

 

  1. #loginForm
  2. login.error.username = 用户名不能为空
  3. login.error.password = 密码不能为空

并使用命令native2ascii转换更新到ApplicationResources_zh_CN.properties 同样的 也需要在ApplicationResources.properties中添加英文的标签

然后再JSP页面login.jsp中输出这两个错误信息 在用户名和密码的文本框后各添加一个标签 文本框的name属性和value属性分别为${status.expression}和${status.value}表示 并在文本框后输出错误信息提示${status.errorMessage}

 

  1. <form name="form1" action="login.do" method="post">
  2. <table width="300" border="1">
  3.     <tr>
  4.         <td colspan="2"><spring:message code="login.page.title" /></td>
  5.     </tr>
  6.     <tr>
  7.         <spring:bind path="command.username">
  8.             <td><spring:message code="login.page.username" /></td>
  9.             <td><input type="text" name="${status.expression }"
  10.                 value="${status.value }" /> <font color="red">${status.errorMessage
  11.             }</font></td>
  12.         </spring:bind>
  13.     </tr>
  14.     <tr>
  15.         <spring:bind path="command.password">
  16.             <td><spring:message code="login.page.password" /></td>
  17.             <td><input type="password" name="${status.expression }"
  18.                 value="${status.value }" /> <font color="red">${status.errorMessage
  19.             }</font></td>
  20.         </spring:bind>
  21.     </tr>
  22.     </table>
  23. </form>

 

完成以上几步之后 在不输入用户名和密码的情况下点击登录按钮 此时会在用户名和密码的文本框后面显示两个错误提示信息

 

注意:此时访问首页面的时候需要输入地址login.do 而不是login.jsp了  因为此时login.jsp页面中已经增加了Spring的标签 改标签引用了command属性 即用户的登录表单LoginForm类 通过访问login.do就会通过LoginAction缓存了用户登录的表单 如果直接访问login.jsp 就没有该表单缓存 就会出错了

 

 

阅读(7594) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~