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各个字段的长度值相对应
例:
< TR >
< TD > < bean: message key= "address.page.qq" / > < / TD >
< TD > < input type = "text" name = "qq" maxlength = "20" > < / TD >
< / 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的验证功能
public ActionErrors validate ( ActionMapping arg0, HttpServletRequest arg1) {
ActionErrors errors = new ActionErrors( ) ;
String queryString = arg1. getQueryString( ) ;
if ( queryString. equalsIgnoreCase ( "method=insert" )
| | queryString. equalsIgnoreCase ( "method=update" ) ) {
//check name
if ( name = = null | | name . equals ( "" ) ) {
errors. add ( "name" , new ActionMessage( "address.error.name" ) ) ;
}
//check mobile
if ( mobile ! = null & & ! mobile. equals ( "" ) ) {
Pattern p_mobile = Pattern . compile ( RegExpression. REG_mobile) ;
Matcher m_mobile = p_mobile. matcher ( mobile) ;
if ( ! m_mobile. find ( ) ) {
errors. add ( "mobile" , new ActionMessage( "address.error.mobile" ) ) ;
}
}
//check email
if ( email ! = null & & ! email. equals ( "" ) ) {
Pattern p_email = Pattern . compile ( RegExpression. REG_email) ;
Matcher m_email = p_email. matcher ( email) ;
if ( ! m_email. find ( ) ) {
errors. add ( "email" , new ActionMessage( "address.error.email" ) ) ;
}
}
//check postcode
if ( postcode ! = null & & ! postcode. equals ( "" ) ) {
Pattern p_postcode = Pattern . compile ( RegExpression. REG_postcode) ;
Matcher m_postcode = p_postcode. matcher ( postcode) ;
if ( ! m_postcode. find ( ) ) {
errors. add ( "postcode" , new ActionMessage( "address.error.postcode" ) ) ;
}
}
}
arg1. setAttribute ( "addressFormBean" , this ) ;
return errors;
}
正则表达式部分
package com. demo. struts. util ;
public class RegExpression {
public final static String REG_int = "^\\d*$" ;
public final static String REG_float = "^\\d+(\\.\\d+)?$" ;
public final static String REG_date = "^[\\d]{4}([-][\\d]{2}){2}$" ;
public final static String REG_time = "^[\\d]{4}([-][\\d]{2}){2}([ ][12]{1}[\\d]{1}([:][123456]{1}[\\d]{1}){2}){1}$" ;
public final static String REG_datetime = "^[\\d]{4}([-][\\d]{2}){2}([ ][12]{1}[\\d]{1}([:][123456]{1}[\\d]{1}){2}){1}$" ;
public final static String REG_email = "^[\\w\\d]+@[\\w\\d]+(\\.[\\w\\d]+)+$" ;
public final static String REG_phone = "^(\\d+[-]){0,2}\\d+$" ;
public final static String REG_mobile = "^[1]\\d{10}$" ;
public final static String REG_postcode = "^\\d{6}$" ;
// public final static String REG_url = "/^[\\w]+[:][/]{2}([\\w]+\\.)+([\\w]+[/])+[\\w]+[.][\\w]+$/";
public final static String REG_url = "^[\\w]+[:][/]{2}([\\w]+\\.)+([\\w]+[/])+[\\w\\.]*$" ;
} ;
3 为address_add.jsp address_edit.jsp页面添加错误标签
在上面的错误信息中 添加了4个资源引用标签 我们在ApplicationResources_temp.properties中添加如下四个标签
# 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个错误信息提示 我们在文本框后面添加一个标签
例如
< TR >
< TD > < bean: message key= "address.page.qq" / > < / TD >
< TD > < input type = "text" name = "qq" maxlength = "20" >
< / TD >
< / TR >
4 为address_add.jsp address_edit.jsp页面维持表单输入
为了在出错后显示用户上一次的输入 我们需要修改表单的各个文本框的代码 使用判断addressFormBean是否存在 我们在AddressForm.java的效验函数中已经保存了对象了 因此此时会查找该对象 然后使用输出addressFormBean对象中的各个表单字段的属性 由于addressFormBean是上一步表单AddressForm.java的对象 因此 他的字段与address_add.jsp中的表单相对应
同样 使用判断addressFormBean不存在时 就直接输出原有的| 即可
例如:
< TR >
< TD > < bean: message key= "address.page.qq" / > < / TD >
< TD > < logic: present name = "addressFormBean" >
< html : text property = "qq" name = "addressFormBean" maxlength = "20" / >
< / logic: present> < logic: notPresent name = "addressFormBean" >
< input type = "text" name = "qq" maxlength = "20" >
< / logic: notPresent> < / TD >
< / TR >
阅读(1861) | 评论(0) | 转发(0) |