浏览 9141 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (8) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2008-05-13
我们在struts-config.xml里: <action-mappings > <action attribute="logForm" input="/form/log.jsp" name="logForm" path="/log" scope="request" type="com.yourcompany.struts.action.LogAction" validate="true" <forward name="s" path="/form/MyJsp.jsp" /> </action>里面必须加上validate="true"这么句代码,否则,验证机制将可能不会运行。 另外,配置文件中还须加入以下代码,表示使用插件: <plug-in className="org.apache.struts.validator.ValidatorPlugIn"> <set-property property="pathnames" value="/WEB-INF/validator-rules.xml, /WEB-INF/validation.xml" /> </plug-in> 注意加入<plug-in>标签的位置,该标签应该放在struts配置文件中的最后,具体位置在元素<struts-config></struts-config>内部,在<message-resources parameter="com.blog.struts.ApplicationResources" />之后,切记要注意位置,不然报错。 其次,在写法上,value的内容中/WEB-INF/validator-rules.xml是默认的,因为在项目使用struts框架时该文件已经在此目录层次下面了,那么之后的/WEB-INF/validation.xml"又是什么呢?这里需要我们手动在WEB-INF目录下新建validation.xml文件,这个文件有什么用?先看下其中写的什么。 <form-validation> <global> </global> <formset> <form name="userForm"> <field property="userName" depends="required,minlength,maxlength"> <arg0 key="userForm.userName" /> <arg1 name="minlength" key="${var:min}" resource="false" /> <arg1 name="maxlength" key="${var:max}" resource="false" /> <var> <var-name>min</var-name> <var-value>6</var-value> </var> <var> <var-name>max</var-name> <var-value>20</var-value> </var> </field> <field property="password" depends="required,minlength,maxlength,mask"> <arg0 key="userForm.password" /> <arg1 name="minlength" key="${var:min}" resource="true" /> <arg1 name="maxlength" key="${var:max}" resource="true" /> <var> <var-name>min</var-name> <var-value>6</var-value> </var> <var> <var-name>max</var-name> <var-value>20</var-value> </var> <var> <var-name>mask</var-name> <var-value>^\w+$</var-value> </var> </field> <field property="email" depends="required,email"> <arg0 key="userForm.email" /> </field> <field property="name" depends="required,maxlength"> <arg0 key="userForm.name" /> <arg1 name="maxlength" key="${var:max}" resource="false" /> <var> <var-name>max</var-name> <var-value>20</var-value> </var> </field> <field property="tel" depends="required,mask"> <arg0 key="userForm.tel" /> <var> <var-name>mask</var-name> <var-value>^\(?(\d{3,4})\)?[-|]?(\d{7,8})$</var-value> </var> </field> <field property="address" depends="required"> <arg0 key="userForm.address" /> </field> </form> <form name="categoryForm"> <field property="categoryName" depends="required"> <arg0 key="categoryForm.categoryName" /> </field> </form> </formset> </form-validation> Validation.xml:该配置文件是专供应用程序使用的,其中所描述的是特定ActionForm会用到validation-rule.xml文件中的哪些验证器。 1.<form-validation>元素 <form-validation>元素是validation.xml文件的根元素,它包含两个子元素:<global>和<formset>元素。其中<global>元素可以出现零次或多次,<formset>元素可以出现一次或多次。 2.<global>元素 <global>元素中通过<constant>子元素来定义常量表达式,每个<constant>子元素定义一个常量表达式,如果有多个常量表达式要定义则可以配置多个<constant>来实现。 3.<formset>元素 <formset>元素包括两个子元素<constant>和<form>。<constant>元素可以出现零次或多次,<form>元素可以出现一次或多次。 这里需要注意的是,在<form>标签中有包括<field>子元素。 4.<field>元素 <field>元素通过property属性指定字段的名字,通过depends属性指定具体的验证规则,验证规则来源于validation-rule.xml中所写的验证方法,这里我们要简单介绍一下validation-rule.xml里面的验证规则是默认,那如果我们有需要定义自己的验证规则也可以写在里面。<field>元素可包含的子元素为<msg>,<arg>,<var>。 第二步 把validator框架使用的消息文本添加到应用的Resource Bundle中,如在ApplicationResources.properties中加入例如: errors.header=<b><font color=ff0000><ul> errors.footer=</ul></font></b> errors.prefix=<li> errors.suffix=</li> error.isexit=\u7528\u6237\u540d\u5df2\u5b58\u5728\uff0c\u8bf7\u91cd\u65b0\u6ce8\u518c\uff01 error.username=\u7528\u6237\u540d\u4e0d\u5408\u6cd5\uff0c\u8bf7\u91cd\u65b0\u586b\u5199\u7528\u6237\u540d\uff01 error.password=\u5bc6\u7801\u4e0d\u5408\u6cd5\uff0c\u8bf7\u91cd\u65b0\u586b\u5199\u5bc6\u7801\uff01 errors.required={0}\u4e3a\u5fc5\u586b\u5b57\u6bb5 errors.minlength={0}\u7684\u957f\u5ea6\u4e0d\u80fd\u5c0f\u4e8e{1} errors.maxlength={0}\u7684\u957f\u5ea6\u4e0d\u80fd\u5927\u4e8e{1} errors.email={0}\u5fc5\u987b\u4e3a\u6709\u6548\u90ae\u4ef6\u5730\u5740 userForm.userName=\u7528\u6237\u540d; userForm.password=\u5bc6\u7801; userForm.email=Email; userForm.name=\u59d3\u540d; userForm.sex=\u6027\u522b; userForm.tel=\u8054\u7cfb\u7535\u8bdd; userForm.address=\u8054\u7cfb\u5730\u5740; userForm.userType=\u7528\u6237\u7c7b\u522b; categoryForm.categoryName=\u7c7b\u522b\u540d\u79f0 第三步 将Form的extends ActionForm改为extends ValidatorForm 第四步 在jsp页面当中,如果我们要创建一个在服务器端验证的页面,我们只需要在控件之后添加<html:errors property="password"/>,即: <tr> <td>密码:</td> <td><html:password property="password" /><html:errors property="password"/></td> </tr> 注意<html:errors property="password"/>之中的property对应的是form中定义的属性。 那么如果我们要创建一个在客户端进行验证的页面,我们需要如下步骤: 1.在<html:form></html:form>的外面加上<html:javascript formName="userForm"/> 2.在<html:form>中加入属性onsubmit=”return validateCardForm(this);”,即; <html:form action="/save_user" method="post" enctype="multipart/form-data" onsubmit="return validateUserForm(this);"> 3.同服务器端验证一样<td><html:password property="password" /><html:errors property="password"/></td> 重点 使用validator进行表单验证的步骤如上,其中最为关键的一步是,validation.xml文件中为表单配置验证规则的写法。 注意事项如下: <form-validation> <global> 在<global>中定义的常量表达式,在文件的其余地方可以直接引用。 即,这里配置的常量表达式是全局的 写法为: <constant> <constant-name>phone</constant-name> <constant-value>^\(?(\d{3})\)?[-|]?(\d{8})$<constant-value> //定义一个名为:phone的正则表达式,3位区号+8位号码 </constant> </global> <formset> <form name="userForm"> <field property="userName" //这里的property要与form表单属性名对应 depends="required,minlength,maxlength"> //这里的depends用于指定对该属性使用什么验证规则,其规则来自于validator-rule.xml文件中所写的规则。指定多个验证器时,会依次调用,直到该表单通过所有验证。 <arg0 key="userForm.userName" /> //arg0对应的是ApplicationResources.property中的{0},即: “errors.required={0}不能为空”,其作用是将arg0中key所对应的资源文件中的“userForm.userName=用户名”的文中或者说是值替换到“errors.required={0}不能为空”中的{0},这样页面输出的是“用户名不能为空”; 下面的arg1同理{1} <arg1 name="minlength" key="${var:min}" resource="false" /> <arg1 name="maxlength" key="${var:max}" resource="false" /> <var> <var-name>min</var-name> <var-value>6</var-value> </var> //var对应key="${var:min}"中的min <var> <var-name>max</var-name> <var-value>20</var-value> </var> </field> </form> </formset> </form-validation> 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2008-05-26
很好很详细~用实例讲解我觉得最易懂~谢谢楼主分享~
|
|
返回顶楼 | |
发表时间:2008-05-27
应该是Struts1.x的validator框架吧
这个框架在使用上有一点的局限: 在应用上如果碰到一个ActionForm在多个地方被使用但是要求验证的内容不同,validator就没有办法很好处理。当然,上述的情况,可能是ActionForm设计的不合理或者其他什么原因造成的就是了 validator的本质其实也是JavaScript(如果我没有理解错误的话),而作J2EE的各位开发者(尤其是前台的coder们),JavaScript是必修的基本功了 |
|
返回顶楼 | |
发表时间:2008-05-28
在我们的项目里面没有使用这个框架, 太复杂。
|
|
返回顶楼 | |
发表时间:2008-12-15
|
|
返回顶楼 | |
发表时间:2008-12-15
XmKevinChen 写道 应该是Struts1.x的validator框架吧
这个框架在使用上有一点的局限: 在应用上如果碰到一个ActionForm在多个地方被使用但是要求验证的内容不同,validator就没有办法很好处理。当然,上述的情况,可能是ActionForm设计的不合理或者其他什么原因造成的就是了 validator的本质其实也是JavaScript(如果我没有理解错误的话),而作J2EE的各位开发者(尤其是前台的coder们),JavaScript是必修的基本功了 你确认吗?? |
|
返回顶楼 | |
发表时间:2008-12-20
最后修改:2008-12-20
XmKevinChen 写道 应该是Struts1.x的validator框架吧
这个框架在使用上有一点的局限: 在应用上如果碰到一个ActionForm在多个地方被使用但是要求验证的内容不同,validator就没有办法很好处理。当然,上述的情况,可能是ActionForm设计的不合理或者其他什么原因造成的就是了 validator的本质其实也是JavaScript(如果我没有理解错误的话),而作J2EE的各位开发者(尤其是前台的coder们),JavaScript是必修的基本功了 呵呵,不要误导观众 可以使用ValidatorActionForm 其次,你说他的本质是js验证,那请你回去好好看看验证框架,不敢苟同! |
|
返回顶楼 | |
发表时间:2008-12-20
你可以使用ValidateActionForm!
|
|
返回顶楼 | |
发表时间:2009-01-22
<field property="userName"
depends="required,minlength,maxlength"> <arg0 key="userForm.userName" /> <arg1 name="minlength" key="${var:min}" resource="false" /> <arg1 name="maxlength" key="${var:max}" resource="false" /> <var> <var-name>min</var-name> <var-value>6</var-value> </var> <var> <var-name>max</var-name> <var-value>20</var-value> </var> </field> 在你写地这段代码中。那个key中所定义的变量key="${var:min}" 和<var-name>min</var-name> 中那个变量的名字可以随便写一个行吗?(key="${var:m}" 和<var-name>m</var-name> )像我括号里边写地这样行吗?我试了好几次都不行啊。还是它原来就定义好了。必须用这个名字验证才可以出来。 |
|
返回顶楼 | |
发表时间:2009-02-01
这个框架当初就觉得有点复杂。后来写js做client的验证,重要逻辑自己写java来做server的验证。
|
|
返回顶楼 | |