我是靠谱客的博主 粗暴夏天,最近开发中收集的这篇文章主要介绍struts中validate的用法,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

在struts-config.xml文件中,action节点下有"validate"这样一个属性。在struts框架中,默认属性是validate="­true"。所以如果想通过Form Baens的重载validate方法来验证数据的话,可以不用理会这一点。题外话:如果你在struts-config.xml文件中,设置validate­="false"的话,validate方法将不起作用。这一点同样对Validate框架来验证数据起作用。

通过Validate框架来验证数据 
1、首先在struts-config.xml文件中,追加如下代码: 
<plug-in className="org.apache.struts.validator.ValidatorPlugIn"> 
<set-property property="pathnames" 


value="/WEB-INF/validator-rules.xml,/WEB-INF/validations.xml"/> 
<set-property property="stopOnFirstError" value="false"/> 
</plug-in> 


2、然后编写自己的Form Baens,有两种方式可供选择: 
① 
写的formBaen需要继承ValidatorForm,而不是第一种方法中的ActionForm 
public class UserForm extends ValidatorForm { 
private String userId = ""; 
private String password = ""; 


public void setUserId(String userId) { 
this.userId = userId; 



public String getUserId() { 
return userId; 



。。。。。。 


然后配置struts-config文件 
<form-bean name="userForm" 
type="com.wxhx.presentation.UserForm"/> 


② 配置struts-config文件 
<form-beans> 
<form-bean name=" userForm" 
type="org.apache.struts.validator.DynaValidatorForm"> 
<form-property name=" userId" type="java.lang.String"/> 
<form-property name="password" 
type="java.lang.String"/> 
</form-bean> 


</form-beans> 


3、配置validation.xml文件 
<formset> 
<form name="userForm"> ----这里的userForm是Form 
Beans的名字 
<field property="userId" depends="required"> 
<arg key="userForm.userId"/> 
</field> 
<field property="password" depends="required,mask"> 
<arg key="userForm.password"/> 
<var> 
<var-name>mask</var-name> 
<var-value>^[0-9a-zA-Z]*$</var-value> 
</var> 
</field> 
</form> 
</formset> 
其中key="userForm.userId"和key="userForm.password"需要在资源文件中配置 
这里需要说明一点,例如:<arg key="userForm.password" 
resource="false"/> 


如果多了resource="false"这句话,那么它不会再从资源文件中去取,而是直接用key值来表示。 


以上是通过validatorForm- or 
DynaValidatorForm来实现Validate验证的 


(附) 


现在有这样一个问题,Form 
Beans可以被多个Action应用,而每个Action可能需要的验证字段都不一样。而在validation.xml中配置的验证方式(如<form 
name="userForm">)是对这个Form 
Beans进行的。这样的话,如何来验证呢? 


你的Form 
Beans可以继承ValidatorActionForm(当然可以直接配置DynaValidatorActionForm)。如下所示: 
public class UserForm extends ValidatorActionForm { 
... 






或是 
<form-bean name=" userForm " 
type="org.apache.struts.validator.DynaValidatorActionForm"> 
... 
</form-bean> 

struts-config文件配置如下: 
<action-mappings> 
<action path="/technology/createUser" 
type="com.wxhx.minihr.CreateUserAction" 
name="userForm"/> 
<action path="/technology/editUser" 
type="com.wxhx.minihr.EditUserAction" 
name="userForm"/> 
</action-mappings> 


validation.xml文件配置如下: 
<formset> 
<form name="/technology/ createUser 
">----这里的采用的是action的path路径 
<field property="city" depends="required"> 
<arg0 key="prompt.city"/> 
</field> 
</form> 


<form name="/technology/editUser "> 
<field property="state" depends="required"> 
<arg0 key="prompt.state"/> 
</field> 
</form> 
</formset> 


关于validator-rules.xml,定义了常用的一些规则,当然也可以自己追加新的规则。 
这里经常会看到msg="errors.required"字样,也是通过资源文件中配置的,默认的资源如下: 


# -- validator -- 
errors.invalid={0} is invalid. 
errors.maxlength={0} can not be greater than {1} characters. 
errors.minlength={0} can not be less than {1} characters. 
errors.range={0} is not in the range {1} through {2}. 
errors.required={0} is required. 
errors.byte={0} must be an byte. 
errors.date={0} is not a date. 
errors.double={0} must be an double. 
errors.float={0} must be an float. 
errors.integer={0} must be an integer. 
errors.long={0} must be an long. 
errors.short={0} must be an short. 
errors.creditcard={0} is not a valid credit card number. 
errors.email={0} is an invalid e-mail address. 
这在struts-blank的例子中会有,在开发项目的时候,注意这些默认资源

三、结合上面的两种验证 
如果即在Form 
Beans中重载了validate方法,又启用了Validate框架,那会是什么效果呢? 
由于要启用Validate框架,Form 
Beans需要继承ValidatorForm,查看ValidatorForm的源代码,发现validate方法已经作了处理(真是为Validate框架&shy;所服务的)。 
那么在Form 
Beans中重载了validate方法的话,就会覆盖原有ValidatorForm中对应的功能,所以如果想一起用的话,需要在Form 
Beans的validate方法中调用errors = super.validate(mapping, 
request);这句代码是启用Validate框架所要做的工作,然后可以判断errors再作下一步的处理。 


当然也可以先做Form 
Beans中的validate方法,然后启用Validate框架,要看具体情况而定。 


四、启用客户端验证 
也是结合validation.xml来验证的,我把validation.xml相关的内容在复制下来,便于看清楚: 
<formset> 
<form name="userForm"> ----这里的userForm是Form 
Beans的名字 
<field property="userId" depends="required"> 
<arg key="userForm.userId"/> 
</field> 
<field property="password" depends="required,mask"> 
<arg key="userForm.password"/> 
<var> 
<var-name>mask</var-name> 
<var-value>^[0-9a-zA-Z]*$</var-value> 
</var> 
</field> 
</form> 
</formset> 


①在需要客户端验证的jsp中加上这么一句<html:javascript 
formName=" userForm "/> 
其中formName就是validation.xml中<form 
name="userForm">所对应的内容 


②在<html:form中追加一个属性οnsubmit="return 
validateUserForm(this);" 


它的语法为:return validate + 
struts-config.xml中定义的form-bean名称 + (this); 


③追加<scriptlanguage="Javascript1.1" 
src="staticJavascript.jsp"></script> 


staticJavascript.jsp的内容为: 


<%@ page language="java" %> 


<%-- set document type to Javascript(addresses a bug in Netscape 
according to a web resource --%> 
<%@ page contentType="application/x-javascript" %> 


<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> 


<html:javascript dynamicJavascript="false" staticJavascript="true"/> 


这只是一种方式,还有其他简洁的(具体为啥这样,不是很明白,希望得到高人指点) 
比如:追加οnsubmit="return validateUserForm(this);" 
<html:javascript formName="userForm" staticJavascript="true"/>

最后

以上就是粗暴夏天为你收集整理的struts中validate的用法的全部内容,希望文章能够帮你解决struts中validate的用法所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(36)

评论列表共有 0 条评论

立即
投稿
返回
顶部