`
自动放假
  • 浏览: 23272 次
文章分类
社区版块
存档分类
最新评论

struts中validator框架简单使用实例

 
阅读更多

struts中validator框架简单使用实例

本文以一登录页面(Login.jsp)为例,讲叙我在JBuilder 2005中如果使用Validator框架来对输入的数据进行验证。
如下图1所示,在用户进行主页面前需要进行身份验证,此页面的验证规则为用户名和密码均不能为空,且密码的长度必须大于等于6个字符。

为了达到以上所说的目的,在Struts中有两种办法:
1.使用ActionForm Bean中的Validate()函数实现,将需要验证的逻辑写入该函数,即在提交表单时会对其进行验证,这中方法的缺点在于必须通过程序代码来实现验证逻辑,如果验证逻辑发生改变,则必重新编写和编译程序代码,此外如果程序中多个ActionFrom Bean共用相同的验证逻辑,则必须重复编程,降低代码的重用性。
2.使用Validator验证框架实现,它能够克服以上所说的局限,此外它的配置灵活,无需编程。

  Validator框架采用两个基于XML的配置文件来配置验证规则,这两个文件为validator-rules.xml和validation.xml,在Struts应用中,这两个文件必须存放在WEB-INF目录下。

  下面从页面开始讲述如果创建此登录验证页面。
Login.jsp页面的关键代码如下:
<tr>
<td width="70" class="TableText">用户名:</td>
<td>
<html:text property="userName" style="TextBoxLong"> </html:text>
<html:errors property="userName" />
</td>
</tr>
<tr>
<td class="TableText">密 码:</td>
<td>
<html:password property="password" style="TextBoxLong"> </html:password>
<html:errors property="password"/>
</td>
</tr>
  说明:
1.用户名文本框的属性名称为userName,对应其ActionFrom中的userName,接下来为显示错误的Struts标签,其属性名称与文本框同名,意为只显示文本框的错误信息,如果没有property,则显示所有错误信息,此标签的作用是一但用户名文本框有错误则通过其进行显示。
2.密码框与用户名文本框基本类似,在此不再叙述。

Login页面创建完成后,即需要创建ActionFrom Bean,名称为LoginActionForm
import javax.servlet.http.*;
import org.apache.struts.action.*;
import org.apache.struts.validator.*;

public class LoginActionForm extends ValidatorForm {
private String password;
private String userName;
private Integer id;
public String getPassword() {
return password;
}

public void setPassword(String password) {
this.password = password;
}

public void setUserName(String userName) {
this.userName = userName;
}

public void setId(Integer id) {
this.id = id;
}

public String getUserName() {
return userName;
}

public Integer getId() {
return id;
}

public void reset(ActionMapping actionMapping,
HttpServletRequest servletRequest) {
password = null;
userName = null;
}
}
  说明:
1.此处的LoginActionForm必须继承自ValidatorForm,而不是ActionForm,原因在于ActionForm不能使用Validator框架完成验证。
2.此LoginActionForm中必须包含有Login.jsp页面中<html:text/>和<html:password/>标签propety属性所指定的属性字段名,即userName和password.
3.除以上所说外,该LoginActionForm就是一个JavaBean类。

定义Action--LoginAction
  此Action与普通的Action并无任何区别,均是完成相应的后台逻辑功能,此页面则是读取数据库中的数据与输入的相比较,匹配则转向主页面,否则转向错误页面,具体实现在此就不叙述了。


创建validator-rules.xml文件,制定验证规则
<!DOCTYPE form-validation PUBLIC
"-//Apache Software Foundation//DTD Commons Validator Rules Configuration 1.0//EN"
"http://jakarta.apache.org/commons/dtds/validator_1_0.dtd">

<form-validation>
<global>
<validator name="required"
classname="org.apache.struts.validator.FieldChecks"
method="validateRequired"
methodParams="java.lang.Object,
org.apache.commons.validator.ValidatorAction,
org.apache.commons.validator.Field,
org.apache.struts.action.ActionMessages,
javax.servlet.http.HttpServletRequest"
 msg="errors.required">
</validator>

<validator name="minlength"
classname="org.apache.struts.validator.FieldChecks"
method="validateMinLength"
methodParams="java.lang.Object,
org.apache.commons.validator.ValidatorAction,
org.apache.commons.validator.Field,
org.apache.struts.action.ActionMessages,
javax.servlet.http.HttpServletRequest"
msg="errors.minlength">
 depends="required"
  </validator>
</global>
</form-validation>
  说明:
1.每个<validator>元素定义了一个惟一的验证规则,此处一共定义了两个验证规则:名为required的规则和名为minlength的规则。
2.<validator>元素的name属性指定验证规则的逻辑名,此名字必须惟一;classname和method属性分别指定实现验证规则逻辑的类和方法;methodParams属性用来指定验证方法包含的参数,多个参数之间用逗号隔开;msg属性指定来自于Resource Bundle中的消息key,此程序的Resource Bundle为ApplicationResources.properties文件,当验证失败时,Validator框架将根据这个消息key到Resource Bundle中查找匹配的消息文本,默认情况下,Validator框架有一组定义的消息文本,参见下文“定义Resource Bundle消息文件”,此处的消息也可以自定义,而不使用其默认消息。
3.除上述的属性外,<validator>还有一个depends属性,用于指定在调用当前验证规则之前必须先调用的其他验证规则,例如上面代码中在调用minlength验证前需先调用required验证规则。如果depends包含多个验证,使用逗号分隔,如depends="required, maxlength",需注意的是如果调用depends规则时验证失败,则不会调用下一个验证规则。
4.下面给出FieldChecks类包含的验证方法,即method后可以写的方法(上面代码中蓝色显示),此外,可以自定义方法。
validateByte、validateCreditCard、validateDate、validateDouble、validateEmail、validateFloat、validateInteger、validateLong、validateMask、validateMinLength、validateMaxLength、validateRange、validateRquired、validateShort。

创建validation.xml文件,此文件可以为应用中的ActionForm配置所需的验证规则,取代在ActionForm类中以编程的方式来实现验证逻辑。
<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE form-validation PUBLIC
"-//Apache Software Foundation//DTD Commons Validator Rules Configuration 1.0//EN"
"http://jakarta.apache.org/commons/dtds/validator_1_0.dtd">
<form-validation>
<formset language="zh_CN">
<form name="LoginActionForm">
<field property="userName" depends="required">
<arg0 name="required" key="User.name" resource="true"/> ==> <msg name="required" key="user.required" resource="true"/>
</field>
<field property="password" depends="required,minlength">
<arg0 key="password.name" />
<arg1 name="minlength" key="${var:minlength}"/>
<var>
<var-name>minlength</var-name>
<var-value>6</var-value>
</var>
</field>
</form>
</formset>
</form-validation>
  说明:
1.<form>元素用于为表单配置验证规则,它的name属性为需要验证的ActionForm的名称,它需要与struts-config.xml中的名称一致,如此处为LoginActionForm.
2.<field>元素用于为表单字段配置验证规则,它的property属性名称需要与Login.jsp页面中的用户名文本框和密码框的property属性名一致。
3.<depends>元素为该字段所采用的验证规则有哪些,如果有多个,则使用逗号分隔。
4.参看以上<msg>一行,<msg>元素指定验证规则对应的消息文本,该消息文本将替代在validator-rules.xml文件中为验证规则配置的默认消息文本。意思即是说,如果上面使用的是<msg name="required" key="user.required" resource="true"/>,而非<arg0 name="required" key="User.name" resource="true"/>,则如果验证失败,验证规则将使用msg中key指定的消息,而非默认的errors.required消息(validator-rules.xml中定义,参看上文)。
5.<field>字段可以包含四个附加的子元素,<arg0>、<arg1>、<arg2>、<arg3>,用于替换复合消息中的参数,<arg0>指定第一个替换值,<arg1>指定第二个,依此类推。每个arg元素包含三个属性:name,key和resource,用法与<msg>相似。如上代码中<arg0 name="required" key="User.name" resource="true"/>意为使用从消息文件ApplicationResources.properties中消息key User.name取出的文本(Username)来替换默许消息文本errors.required中的参数,使之组合成一句有意思的文本,errors.required的原文本为:{0}is requuired.

向struts-config.xml中添加validate属性,使相应字段开启验证过程,并配置validator-rules.xml和validation.xml,使之起作用。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN" "http://struts.apache.org/dtds/struts-config_1_2.dtd">
<struts-config>
<form-beans>
<form-bean name="LoginActionForm" type="personal.system.Login.struts.actionform.LoginActionForm" />
</form-beans>
<action-mappings>
<action input="/JSP/Login.jsp" name="LoginActionForm" path="/LoginAction" scope="request" type="personal.system.Login.struts.action.LoginAction" validate="true">
<forward name="succeed" path="/JSP/index.jsp" />
<forward name="failed" path="/JSP/Failed.jsp" />
</action>
</action-mappings>
<message-resources parameter="ApplicationResources" /> ==>指定消息资料文件(Resource Bundle)的文件名,此处全名文件名即为ApplicationResources.properties
<plug-in className="org.apache.struts.validator.ValidatorPlugIn">
<set-property property="pathnames" value="/WEB-INF/validator-rules.xml,/WEB-INF/validation.xml" />
</plug-in>
</struts-config>

定义Resource Bundle消息文件--ApplicationResources.properties
password.name=Password ==>定义参数值,password字段使用:<arg0 key="password.name" />
User.name=Username  ==>定义参数值,username字段使用:<arg0 name="required" key="User.name" resource="true"/>

##以下均为Validator框架的默认消息文本,其中的{0},{1},{2}...代表传入参数的取代位置。
errors.required=<font color="red">{0} is required.</font>
errors.minlength=<font color="red">{0} can not be less than {1} characters.</font>
errors.maxlength=<font color="red">{0} can not be greater than {1} characters.</font>
errors.invalid=<font color="red">{0} is invalid.</font>

errors.byte=<font color="red">{0} must be a byte.</font>
errors.short=<font color="red">{0} must be a short.</font>
errors.integer=<font color="red">{0} must be an integer.</font>
errors.long=<font color="red">{0} must be a long.</font>
errors.float=<font color="red">{0} must be a float.</font>
errors.double=<font color="red">{0} must be a double.</font>

errors.date=<font color="red">{0} is not a date.</font>
errors.range=<font color="red">{0} is not in the range {1} through {2}.</font>
errors.creditcard=<font color="red">{0} is an invalid credit card number.</font>
errors.email=<font color="red">{0} is an invalid e-mail address.</font>

分享到:
评论

相关推荐

    struts中使用validator验证框架

    struts中使用validator框架由简单到复杂的三个实例,附加说明。

    struts1.x使用common-validator验证框架

    在struts1.x版本中使用validator验证框架实例。

    struts验证框架实例

    一个真实的、很不错的struts验证实例,可以学到许多东西

    struts中文教程及实例资源

    包含: Struts2.0中文教程 struts2权威指南 struts架构的指导 struts框架详细介绍 struts整体架构及核心标签库 validator页面验证 用struts架构实现文件上传任务

    实战STRUTS 电子书

    书中还介绍了如何同时使用JSP标签和Velocity模板,并仔细介绍了Struts体系结构以及Struts控制流,同时也说明了如何扩展Struts框架结构。 书中还明确指出了Struts 1.0和1.1版本间的区别,同时还通过实例说明了Struts ...

    精通Struts基于MVC的Java Web设计与开发 孙卫琴 光盘

    第12章到第16章结合具体的Struts应用实例,详细介绍了Struts的标签库以及Tiles框架的使用方法。第17章和第18章介绍如何采用EJB和Web服务来实现Struts框架的模型。第19章到第21章介绍了如何采用第三方软件,如Apache ...

    structs程序设计从入门到精通word文档

    11.1 在Validator框架中使用JavaScript 14 11.1 在struts中用validator作服务器端验证 14 第12章 Struts HTML标签库 14 12.1 Struts中基本的HTML标签 14 12.1 Struts中表单处理的HTML标签 14 12.1 Struts中复选框和...

    精通 Struts:基于 MVC 的 JavaWeb 设计与开发(PDF)

    第12章到第16章结合具体的Struts应用实例,详细介绍了Struts的标签库以及Tiles框架的使用方法。第17章和第18章介绍如何采用EJB和Web服务来实现Struts框架的模型。第19章到第21章介绍了如何采用第三方软件,如Apache ...

    Struts1.3 备忘笔记

    08 Struts_08DynaValidatorForm : Struts框架的Validator验证框架 09 Struts_09Token : Structs的令牌机制,避免重复提交问题 10 Struts_10SmartUpload : structs的文件上传 11 Struts_11Internationalize : Structs...

    精通Struts_基于MVC的Java Web设计与开发

    第12章到第16章结合具体的Struts应用实例,详细介绍了Struts的标签库以及Tiles框架的使用方法。第17章和第18章介绍如何采用EJB和Web服务来实现Struts框架的模型。第19章到第21章介绍了如何采用第三方软件,如Apache ...

    精通struts:基于mvc的java web设计与开发part3

    第12章到第16章结合具体的Struts应用实例,详细介绍了Struts的标签库以及Tiles框架的使用方法。第17章和第18章介绍如何采用EJB和Web服务来实现Struts框架的模型。第19章到第21章介绍了如何采用第三方软件,如Apache ...

    精通struts:基于mvc的java web设计与开发part2

    第12章到第16章结合具体的Struts应用实例,详细介绍了Struts的标签库以及Tiles框架的使用方法。第17章和第18章介绍如何采用EJB和Web服务来实现Struts框架的模型。第19章到第21章介绍了如何采用第三方软件,如Apache ...

    精通struts:基于mvc的java web设计与开发part1

    第12章到第16章结合具体的Struts应用实例,详细介绍了Struts的标签库以及Tiles框架的使用方法。第17章和第18章介绍如何采用EJB和Web服务来实现Struts框架的模型。第19章到第21章介绍了如何采用第三方软件,如Apache ...

    基于MVC的java Web设计与开发

    第12章到第16章结合具体的Struts应用实例,详细介绍了Struts的标签库以及Tiles框架的使用方法。第17章和第18章介绍如何采用EJB和Web服务来实现Struts框架的模型。第19章到第21章介绍了如何采用第三方软件,如Apache ...

    网上购物系统struts+Oracle10.2

    struts做的一个网上购物系统的练习,包括了以下几个方面的内容: ...3.tiles框架的使用, 4.Validator校验, 5.自定义异常处理, 6.JNDI+Oracle10.2数据库连接池的配置 7.iterate迭代器和JAVA泛型的用法

    java面试宝典

    156、在jsp:useBean语法中使用beanName有何好处? 37 157、当我使用时,在浏览器的地址栏没有改变? 37 158、如何转换JSP 0.9版本的文件到JSP1.1? 37 160、JSP和Servlet有哪些相同点和不同点,他们之间的联系是什么...

    Spring中文帮助文档

    6.8.1. 在Spring中使用AspectJ进行domain object的依赖注入 6.8.2. Spring中其他的AspectJ切面 6.8.3. 使用Spring IoC来配置AspectJ的切面 6.8.4. 在Spring应用中使用AspectJ加载时织入(LTW) 6.9. 更多资源 7...

    Spring-Reference_zh_CN(Spring中文参考手册)

    6.8.1. 在Spring中使用AspectJ来为domain object进行依赖注入 6.8.1.1. @Configurable object的单元测试 6.8.1.2. 多application context情况下的处理 6.8.2. Spring中其他的AspectJ切面 6.8.3. 使用Spring IoC来...

    JavaServer Faces 2.0完全参考手册(JSF2.0中文版) 1/2

    4.1 jsf中使用模板化的威力 4.2 jsp与facelets的异同 4.3 使用facelets执行模板化 4.4 facelets模板化标签使用指南 4.4.1 ui:composition 4.4.2 ui:decorate 4.4.3 ui:define 4.4.4 ui:insert 4.4.5 ui:include ...

    千方百计笔试题大全

    156、在jsp:useBean语法中使用beanName有何好处? 37 157、当我使用时,在浏览器的地址栏没有改变? 37 158、如何转换JSP 0.9版本的文件到JSP1.1? 37 160、JSP和Servlet有哪些相同点和不同点,他们之间的联系是什么...

Global site tag (gtag.js) - Google Analytics