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

全部博文(252)

文章存档

2012年(96)

2011年(156)

分类: Java

2012-01-11 16:16:30

Struts第三步
增加表单验证功能
 
1  为address_add.jsp  address_edit.jsp页面表单增加长度限制
2  为AddressForm.java添加效验功能
3  为address_add.jsp address_edit.jsp页面添加错误标签
4  为address_add.jsp address_edit.jsp页面维持表单输入
 
 
1  为address_add.jsp  address_edit.jsp页面表单增加长度限制
我们已经将页面中的表单 AddressForm.java 中的字段对应起来了 而AddressForm.java中的字段又和数据表address的各个字段想对应 数据表address中的各个字段都有长度限制 因此在页面表单中的各个字段也必须有长度限制
进行输入长度限制的方法很简单 只需要给文本框添加一个maxlength属性 属性的值表示最多可以输入的字符数 该长度值可以和创建的address各个字段的长度值相对应
例:
  1. <TR>
  2.         <TD><bean:message key="address.page.qq" /></TD>
  3.          <TD><input type="text" name="qq" maxlength="20"></TD>
  4.     </TR>
2  为AddressForm.java添加效验功能
在AddressForm类中添加一个验证函数validate() 该函数继承自其父类ActionForm 它包含两个变量
ActionMapping
HttpServletRequest
通过这两个变量可以与外界进行交互 在该函数中包含以下几个部分
创建一个ActionErrors对象errors 用于保存验证错误的提示信息
检验性命是否为空 如果为空则保存一个错误信息name 改信息引用了资源文件中的标签address.error.username
检验手机号码是否符合正则表达式RegExpression.REG_mobile的要求 如果不符合则保存一个错误信息mobile 该信息引用了资源文件中的标签 address.error.mobile
。。。
保存该表单信息为addressFormBean 饼干会验证的错误对象errors 这里必须保存对象addressFormBean 并返回errors 他的作用是将错误的表单信息返回到JSP页面中 以便在JSP页面中显示出错的信息
 
AddressForm.java的验证功能
  1. public ActionErrors validate(ActionMapping arg0, HttpServletRequest arg1) {
  2.         ActionErrors errors = new ActionErrors();
  3.         String queryString = arg1.getQueryString();
  4.         if (queryString.equalsIgnoreCase("method=insert")
  5.                 || queryString.equalsIgnoreCase("method=update")) {
  6.             //check name

  7.             if (name == null || name.equals("")) {
  8.                 errors.add("name", new ActionMessage("address.error.name"));
  9.             }
  10.             
  11.             //check mobile

  12.             if (mobile != null && !mobile.equals("")) {
  13.                 Pattern p_mobile = Pattern.compile(RegExpression.REG_mobile);
  14.                 Matcher m_mobile = p_mobile.matcher(mobile);
  15.                 if (!m_mobile.find()) {
  16.                     errors.add("mobile", new ActionMessage("address.error.mobile"));
  17.                 }
  18.             }
  19.             
  20.             //check email

  21.             if (email != null && !email.equals("")) {
  22.                 Pattern p_email = Pattern.compile(RegExpression.REG_email);
  23.                 Matcher m_email = p_email.matcher(email);
  24.                 if (!m_email.find()) {
  25.                     errors.add("email", new ActionMessage("address.error.email"));
  26.                 }
  27.             }
  28.             
  29.             //check postcode

  30.             if (postcode != null && !postcode.equals("")) {
  31.                 Pattern p_postcode = Pattern.compile(RegExpression.REG_postcode);
  32.                 Matcher m_postcode = p_postcode.matcher(postcode);
  33.                 if (!m_postcode.find()) {
  34.                     errors.add("postcode", new ActionMessage("address.error.postcode"));
  35.                 }
  36.             }
  37.         }
  38.         arg1.setAttribute("addressFormBean", this);
  39.         return errors;
  40.     }
 
 
正则表达式部分
  1. package com.demo.struts.util;

  2. public class RegExpression {
  3.     public final static String REG_int = "^\\d*$";
  4.     public final static String REG_float = "^\\d+(\\.\\d+)?$";
  5.     public final static String REG_date = "^[\\d]{4}([-][\\d]{2}){2}$";
  6.     public final static String REG_time = "^[\\d]{4}([-][\\d]{2}){2}([ ][12]{1}[\\d]{1}([:][123456]{1}[\\d]{1}){2}){1}$";
  7.     public final static String REG_datetime = "^[\\d]{4}([-][\\d]{2}){2}([ ][12]{1}[\\d]{1}([:][123456]{1}[\\d]{1}){2}){1}$";
  8.     public final static String REG_email = "^[\\w\\d]+@[\\w\\d]+(\\.[\\w\\d]+)+$";
  9.     public final static String REG_phone = "^(\\d+[-]){0,2}\\d+$";
  10.     public final static String REG_mobile = "^[1]\\d{10}$";
  11.     public final static String REG_postcode = "^\\d{6}$";
  12. //    public final static String REG_url = "/^[\\w]+[:][/]{2}([\\w]+\\.)+([\\w]+[/])+[\\w]+[.][\\w]+$/";

  13.     public final static String REG_url = "^[\\w]+[:][/]{2}([\\w]+\\.)+([\\w]+[/])+[\\w\\.]*$";

  14. };
 
3  为address_add.jsp address_edit.jsp页面添加错误标签
在上面的错误信息中 添加了4个资源引用标签 我们在ApplicationResources_temp.properties中添加如下四个标签
  1. # addressForm
    address.error.name=Name can't be null
    address.error.mobile=It must be 1 and 10 numbers
    address.error.email=Format is
    address.error.postcode=It must be 6 numbers
使用命令native2ascii转换更新到ApplicationResources_zh_CN.properties  同样也需要在ApplicationResources.properties中添加英文的标签
在JSP页面address_add.jsp address_edit.jsp中输出这4个错误信息提示 我们在文本框后面添加一个标签
例如
  1. <TR>
  2.         <TD><bean:message key="address.page.qq" /></TD>
  3.         <TD><input type="text" name="qq" maxlength="20">
  4.         </TD>
  5.     </TR>
 
4  为address_add.jsp address_edit.jsp页面维持表单输入
为了在出错后显示用户上一次的输入 我们需要修改表单的各个文本框的代码 使用判断addressFormBean是否存在 我们在AddressForm.java的效验函数中已经保存了对象了 因此此时会查找该对象 然后使用输出addressFormBean对象中的各个表单字段的属性 由于addressFormBean是上一步表单AddressForm.java的对象 因此 他的字段与address_add.jsp中的表单相对应
同样 使用判断addressFormBean不存在时 就直接输出原有的|即可
例如:
  1. <TR>
  2.         <TD><bean:message key="address.page.qq" /></TD>
  3.         <TD><logic:present name="addressFormBean">
  4.             <html:text property="qq" name="addressFormBean" maxlength="20"/>
  5.         </logic:present> <logic:notPresent name="addressFormBean">
  6.             <input type="text" name="qq" maxlength="20">
  7.         </logic:notPresent></TD>
  8.     </TR>
阅读(1801) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~