it167.com  设为主页
 收藏本站
 
  资讯:业界动态 | 软件动态 | 人物专栏 | 安全资讯 | 网络生活 | 电子商务 | 小游戏 | 视频 | 美女图片 | 音乐
  网络编程 | 网站运营 | 网页制作 | 图形图象 | 操作系统 | 媒体动画 | 软件教学 | 网络应用 | 邮件系统 | 网络安全 | 认证考试
asp | .net | php | jsp | Sql | java | Dreamweaver | FrontPages | Javascript | css | Coreldraw | photoshop | Flash | Coreldraw
当前位置: > 主页>网络编程>Java>JAVA开发技巧>使用 Struts Validator(1)
最新新闻

·机会与整合 边缘化互联
·TOM-Skype新增三大本地
·雅虎抢闸邮箱竞赛 网易
·新浪抢攻北京奥运
·洞悉网络口碑的掘金机会
·拆解网络病毒黑金交易
·木马下载器近期出现新变
·《互联网周刊》第17期文
·Web2.0是否催生自吹自擂
·三张宝宝裸照招来MSN封
热门新闻
·Java SE 6 的HTTP 协议
·Java中对HashMap的深度
·Java调用Oracle的过程和
·开源技术 Eclipse使用技
·深入了解WebLogic的类装
·Java进阶:Struts多模块
·Java初学者入门经典:面
·Jave学习精华:Jsp小结
·Java学习:EJB的专用术语
·编程必备经典:Java常见
推荐新闻
 
 

使用 Struts Validator(1) 

作者:   来源:it167   点击:   日期:2007-01-28

值得一提的是,这里还没有有验证代码!由于还没有创建定制 ActionForm 和自行实现 validate() 方法,所以 Action 对于什么是正确的一无所知,实际上,如果没有验证问题,甚至不会访问它。这意味着代码完全没有验证逻辑,而且就像在下一节中看到的,代码将保持这个样子。

实际上,这是我花了很多时间介绍应用程序设置的主要原因之一。代码、业务逻辑、甚至大多数配置都缺乏验证逻辑。所以每次修改允许的口令长度时,都不得不考虑重新部署表单和动作。实际上,只需要修改一个小小的 XML 文件就可以了。但是现在我还要向前走;在下一节,将开始查看要做 什么才能利用验证。

使用 Validator

没有 Validator 的 Struts

在讨论用 Validator 能做什么之前,先简要地描述一下没有 Validator 时验证内容必须要做什么。回忆一下前面添加到 WEB-INF/struts-config.xml 中的 form-bean:

<form-bean name="ValidationForm"

type="org.apache.struts.action.DynaActionForm">

<form-property name="username" type="java.lang.String" />

<form-property name="password" type="java.lang.String" />

<form-property name="phone" type="java.lang.String" />

<form-property name="email" type="java.lang.String" />

<form-property name="url" type="java.lang.String" />

</form-bean>

如果 Validator 既没安装也不可用,还想执行服务器端验证,那么需要替换表单的类型 —— 把当前的设置org.apache.struts.action.DynaActionForm 换成定制类型,例如 com.ibm.struts.ValidationForm。这个类要扩展默认的 Struts 表单 org.apache.struts.action.ActionForm。然后,要实现 validate() 方法。看起来可能像这样:

public ActionErrors validate(ActionMapping mapping, HttpServletRequest req) {

ActionErrors errors = new ActionErrors();

// Do all sorts of validation

if ((getUsername() == null) || (getUserName().length() < 1)) {

errors.add("username", new ActionMessage("validation.errors.username.required"));

} else if (getUsername().length() < 8) {

errors.add("username", new ActionMessage("validation.errors.username.too-short"));

} // ... etc.

return errors;

}

不仅需要对应用程序中的每个表单创建定制类,而且还会违犯在教程前面的介绍中提到过的一个原则 —— 验证是基于服务器的。每个请求都必须到达 servlet 引擎、被委托给 Struts、传递给正确的 ActionForm、得到处理、然后再返回(返回给 Struts、再到 servlet 容器,然后到用户)。糟透了,是不是?

您可能把验证移动到 JavaScript(下一个最佳选择),但是这也是一个痛苦,至于理由已经在前面提到过。另外,JavaScript 模块(您正在模块文件中编写脚本,而不是直接写到 JSP 中,对么?)不能访问 Struts 的属性文件,这意味着添加到 MessageResources.properties 中的所有这些好的错误消息,在验证中都用不上。这样就丧失了一些 Struts 最好的特性:模块化和易于国际化。

显然,肯定有更好的方法。而且,谢天谢地,现在是时候研究 Validator 代码了。

动态验证和 Validator

如果关闭了 struts-config.xml 文件,请再次打开它。现在回到 form-bean 元素。需要修改表单类型,但不是改成定制类,而是使用 Validator 提供的类 org.apache.struts.validator.DynaValidatorForm,如下所示:

<form-bean name="ValidationForm"

type="org.apache.struts.validator.DynaValidatorForm">

<form-property name="username" type="java.lang.String" />

<form-property name="password" type="java.lang.String" />

<form-property name="phone" type="java.lang.String" />

<form-property name="email" type="java.lang.String" />

<form-property name="url" type="java.lang.String" />

</form-bean>

做这一修改,保存修改过的配置文件,并重新部署应用程序。如果进入验证表单,输入一些假值(或根本不输入值),并点击 Submit。将会看到和以前看到的一样的 success.jsp 页面。实际上,做这个修改对应用程序没有实际的改变。因为没有指定任何要应用的验证规则。但是,现在有了一个可以指定这些规则框架 —— 根本不用做代码级或类级的修改。

在进入之前,我要先给出一些强烈的建议:在表单 bean 中应当一直 使用 DynaValidatorForm。因为没有设置验证规则时,它的作用就像 Struts 的 DynaActionForm 一样。但是,更重要的是,以后总能在不修改表单 bean 的情况下就添加验证规则。由于这个原因(除非正在使用定制的 ActionForm 实现),我在我所有的表单 bean 中都尝试使用 DynaActionForm。

添加验证规则

现在我们进入有趣的部分。打开 WEB-INF/validation.xml,这是我在前面提到过的两个特定于 Validator 的配置文件的第二个(第一个是 validator-rules.xml,负责指定通用验证规则)。

validation.xml 文件包含表单特定字段(在 struts-config.xml 中定义)和通用验证规则(在 validator-rules.xml 中)的映射。请打开 validation.xml 并找到 formset 元素。在这个元素内,添加清单 14 中的代码(现在还没有意义,但马上会解释它):

清单 14. formset 元素的代码

<form name="ValidationForm">

<field property="username"

depends="required,minlength">

<arg0 key="prompt.username" />

<arg1 key="${var:minlength}" name="minlength"

resource="false" />

<var>

<var-name>minlength</var-name>

<var-value>6</var-value>

</var>

</field>

<field property="password"

depends="required,minlength">

<arg0 key="prompt.password" />

<arg1 key="${var:minlength}" name="minlength"

resource="false" />

<var>

<var-name>minlength</var-name>

<var-value>8</var-value>

</var>

</field>

</form>

首先,form 元素指明开始了一个新表单;name 属性标识这个表单。不出所料,这里的名称应当与 struts-config.xml 中的 form-bean 元素匹配。表单列出后,需要为每个想要验证的字段指定规则。



共13页: 上一页 [1] [2] [3] [4] [5] [6] [7] [8] 9 [10] [11] [12] [13] 下一页
文章评论】 【收藏本文】 【推荐好友】 【打印本文】 【论坛讨论

   相关文章:
·用J2SE 1.4进行Internet安全编程(上)(1) ·J2EE项目开发经验二则
·J2EE WEB应用架构分析(1) ·J2EE中XML配置文件的读取处理
·Eclipse开发工具简介 ·论J2EE开发Web应用程序中的安全认证机制(

   文章评论:(0条)
  
 请留名: 匿名评论   点击查看所有评论 网管论坛
 

  责任编辑:it167  声明:刊登此文章是为了传递更多信息,文章内容仅供参考,转载请注明出处。