• 博客园logo
  • 会员
  • 周边
  • 新闻
  • 博问
  • 闪存
  • 众包
  • 赞助商
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
thankgoodness
博客园    首页    新随笔    联系   管理    订阅  订阅

关于validate的学习

这几天在忙着公司的一个module的validation的维护和Merge工作,我们公司用到的是Struts,在一个Release里面用到了validation的东西,似乎感觉这东西不错,于是好象在新的Release要沿用.

为了做好本职工作,我在网上搜集了一些Struts validation方面的资料,做了一个非常非常简单的例子,如果你对Struts的validation不熟悉, 那么这个‘弯路’我就帮你走了。呵呵。

废话少讲,我们进入正题:

1.什么是Validation框架?
http://www.oracle.com/technology/oramag/oracle/04-jan/o14dev_struts.html
先给一个link给你看看。
[我的理解] 先说句废话,他其实是用来验证的。呵呵。他属于服务器端的验证,为什么说它是服务器端的验证,是因为Struts Validation Framework是在服务器工作的。还有一个客户端的验证,一般来说都是用Javascript来实现的,这个是地球人都知道。为什么有时候要用服务器验证还要客户端验证呢? 因为这样更保险,因为这样更能保证产品的安全性(扯远啦.)

2. Struts验证的几种方式:
http://www.blogjava.net/iask/archive/2005/08/02/9056.aspx
我觉得他说得蛮好的.

3. 通过一个简单的例子学Struts Validation.

a. 在Eclipse(其他IDE)中弄一个空的Struts项目出来,然后在web/inf下面加两个配置文件:
validation.xml 和 validator-rules.xml . 你暂时可以不管它是个什么东西,我们先看看它长得什么样:

validation.xml:
----------------------------------------------------
<?xml version="1.0" encoding="ISO-8859-1"?>
<form-validation>
     <formset>
       <form name="logonForm">   
//指定你要验证的哪个form,这个需要和struts-config.xml中的form的名字对应起来
         <field property="username"
               depends="required">        //
很明显,这个的验证的标准是让username是Reqired,即username是必须的.
           <arg0 key="prompt.username"/> // prompt.username需要到资源文件里面去配置
         </field>
         <field property="password"   
               depends="required">     //同username
           <arg0 key="prompt.password"/>
         </field>
       </form>
     </formset>
</form-validation>
-----------------------------------------------------

这就是validation,设想一下,我们用jsp制作了两个text,一个是username一个是password,然后这里的validation的意思是说在进入到action之前我们是不允许它是空的。如果是空的,我们得给用户友好的提示。其实你不用validation也可以的。对吧。

这里还有个<arg0 key="prompt.username"/>,<arg0 key="prompt.password"/> 象这样的东西,他是需要在资源文件中配置的,其意思是指一个text. 因为后来我们输出错误消息的时候,往往是这样提示的:
       Password is required.
注意:
在Struts validation framework里面对这种类型的错误进行了自己的一些配置,我们只需要在配置文件中输入:errors.required={0} is required. 不需要对每个元素的错误信息在资源文件里配置。因为required的错误validation framework是已经在validator-rules.xml 中封装好了的。那么真正的错误信息就是随着arg0 的变化而变化了,比如说username 出错, 而prompt.username在资源文件中的配置是username, like:      prompt.username = username;     总结一下:对于同种类型的错误,我们只要在资源文件中配置一条message记录就可以了,恩,我想你已经初步感受到Struts validation framework的方便与快捷了。

-------------------------------------------------------------------------------------------------------------------------
validator-rules.xml
我用的是 Struts1.1,在加Struts项目到Eclipse的时候会自动生成,刚才我也说啦,它是定义一下Struts的错误类型,这样我们就可以综合治理了。

-------------------------------------------------------------------------------------------------------------------------
Struts-config.xml
------------------------------------------------------------------------------------------------------------
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.1//EN" "
http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd
">

<struts-config>
     <data-sources />
     <form-beans >
       <form-bean name="logonForm" type="com.webex.application.hut.form.LogonForm" />

     </form-beans>

     <global-exceptions />
     <global-forwards />
     <action-mappings >
       <action
         attribute="logonForm"
         input="/form/logon.jsp"
         name="logonForm"
         path="/logon"
         scope="request"
         type="com.webex.application.hut.action.LogonAction" />

     </action-mappings>

     <message-resources parameter="com.webex.application.hut.ApplicationResources" />
  
     <plug-in className="org.apache.struts.validator.ValidatorPlugIn">
     <set-property property="pathnames" value="/WEB-INF/validator-rules.xml, /WEB-INF/validation.xml"/>
</plug-in>

// 注意这里就是在配置文件中添加validation的插件,立即插立即用.
</struts-config>
------------------------------------------------------------------------------------------------------------

Struts的基本配置,如果你不会,请用自动生成功能。
-------------------------------------------------------------------------------------------------------------------------

ApplicationResources.properties (资源文件)

--------------------------------------------------------------------------------
# Resources for parameter 'com.webex.application.hut.ApplicationResources'
# Project P/TestingWanglinghua
# For login message


loginlogic.username = Please enter your username:
loginlogic.password = Please enter your password:

prompt.username = username
prompt.password = password
errors.required ={0} is required.
--------------------------------------------------------------------------------

JSP文件 form/logon.jsp
--------------------------------------------------------------------------------
<%@ page language="java"%>
<%@ taglib uri="
http://jakarta.apache.org/struts/tags-bean" prefix="bean"%>
<%@ taglib uri="
http://jakarta.apache.org/struts/tags-html
" prefix="html"%>

<html>
<head>
     <title>JSP for logonForm form</title>
</head>
<body>
     <html:form action="/logon">
  
     <bean:message key="loginlogic.username"/><html:text property = "username"/> <html:errors property="username"/><br>
     <bean:message key="loginlogic.password"/><html:text property = "password"/> <html:errors property="password"/><br>
  
      <html:submit/><html:reset/><html:cancel/>
   

     </html:form>
</body>
</html>
--------------------------------------------------------------------------------

Form文件:LogonForm.java
----------------------------------------------------------------------------------------
// Created by MyEclipse Struts
// XSL source (default):
// platform:/plugin/com.genuitec.eclipse.cross.easystruts.eclipse_4.1.1/xslt/JavaClass.xsl

package com.webex.application.hut.form;

import org.apache.struts.validator.ValidatorForm;

/**
* MyEclipse Struts Creation date: 09-20-2006 XDoclet definition:
* @struts.form name="logonForm"
*/
public class LogonForm extends ValidatorForm {

     // --------------------------------------------------------- Instance Variables

     // --------------------------------------------------------- Methods
     private String username;

     private String password;

     public String getUsername() {
       return username;
     }

     public void setUsername(String username) {
       this.username = username;
     }

     public String getPassword() {
       return password;
     }

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

}

在validator-rules.xml,

<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.ActionErrors,
javax.servlet.http.HttpServletRequest"
msg="errors.required">

</validator>

//msg="errors.required"这句话是在资源文件里面定义的名字,为什么非在对某一种类型的错误指定这个名字是在validator-rules.xml里面定义的。 你应该可以看到validateRequired方法是用Validation Framework提供的。当然它还提供了更多基本的严整法则:

<validator name="requiredif" classname="org.apache.struts.validator.FieldChecks" method="validateRequiredIf"
methodParams="java.lang.Object,
org.apache.commons.validator.ValidatorAction,
org.apache.commons.validator.Field,
org.apache.struts.action.ActionErrors,
org.apache.commons.validator.Validator,
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.ActionErrors,
javax.servlet.http.HttpServletRequest"
depends="" msg="errors.minlength">


posted @ 2008-06-23 11:23  宇晨  阅读(256)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2026
浙公网安备 33010602011771号 浙ICP备2021040463号-3