1.struts将实际开发中的问题,考虑的相对比较全面。struts的后台验证就是struts的一个亮点,它给我们提供了大量的验证类库,你可以选择好几种验证方式。比如利用
1.1 利用Validator插件
虽然Validator框架是与Struts封装在一起提供的,但在默认状况下Validator并不被启用。为了使用Validator要在struts-config.xml文件中添加下面的插件定义。配置如下:
<plug-in className="org.apache.struts.validator.ValidatorPlugIn"> <set-property
property="pathnames" value="/WEB-INF/validator-rules.xml,/WEB-INF/validation.xml"/> </plug-in>
注释:property 的属性名字必须使这个pathnames,属性值是验证文件的路径
1.1.1配置validator-rules.xml Struts示例应用程序带有这个文件的预配置拷贝。在大多数情况下,你不必修改这个预配置拷贝,除非你要向该框架中添加自己定制的验证。
1.1.2配置ApplicationResource.properties ApplicationResource.properties这个属性文件用来显示页面验证错误的消息,validator-rules.xml的标准验证逻辑中包括了错误信息的名称,譬如required验证会在“msg”属性中包括errors.required消息,这时你就需要在ApplicationResource.properties中定义该消息,必须要和validator-rules.xml中的msg申明的消息名称一致。例如:
errors.required={0} is required.
errors.required={0} 不能为空 errors.minlength={0} can not be less than {1} characters.
errors.minlength={0} 长度不能小于一个字符 errors.invalid={0} is invalid.
…………………………………….
errors.byte={0} must be a byte.
……………………………………. errors.short={0} must be a short.
……………………………………. errors.integer={0} must be an integer. errors.long={0} must be a long. errors.float={0} must be a float. errors.double={0} must be a double.
errors.date={0} is not a date. errors.range={0} is not in the range {1} through {2}. errors.creditcard={0} is an invalid credit card number. errors.email={0} is an invalid e-mail address.
|
将这些信息直接拷贝到ApplicationResource.properties中即可。可以显示中文字符,但是你的编码方式必须统一比如数据库编码方式,与页面显示方式。必须一致编码方式可以选择utf-8,gbk,gb2312方式进行编码。
1.1.3创建Form 根据不同情况分别可以创建三种类型的form: 1、ValidatorForm 2、DynaValidatorForm 3、ValidatorActionForm和DynaValidatorActionForm 注意:对于由myeclipse生成的静态form,如果在form中包括validate()方法,要将其去掉,否则,验证就会被这个空的validate()方法覆盖而没有发挥作用
创建步骤类似,
ValidatorForm
需要具体的
form,该form继承自ValidatorForm,并且不包含reset()和validate()方法,而
DynaValidatorForm
不需要具体的
form,这两种form的实现方法基本相同,
对ValidatorActionForm和DynaValidatorActionForm的解释:
对于1、2两种验证有一点不足,就是在validation.xml文件中将表单属性的验证捆绑到具体的form上了,譬如:
<form name="registerForm"> <field property="userName" depends="required"> <arg key="label.username"/> </field> <field property="passWord" depends="required,maxlength"> <arg0 key="label.password"/> <arg1 name="maxlength" key="${var:maxlength}" resource="false"/> <var> <var-name>maxlength</var-name> <var-value>8</var-value> </var> </field> <field property="phone" depends="required,mask"> <arg key="label.phone"/> <var> <var-name>mask</var-name> <var-value>^[0-9]*$</var-value> </var> </field> </form>
|
可以看到,form的name属性指定了具体的form即registerForm,下面对三个属性的验证规则只能用在registerForm上,如果这三个验证规则是通用的就好了,也就是说如果存在注册表单和修改表单的操作都能够使用这三个规则就好了,这时就要引入一个概念就是验证跟随操作,而不是绑定到具体的form上。例如注册表单和修改表单由于验证规则相同,则将三个验证规则放到具体的action上就行了,验证规则可以如下定义:
<form name="/register"> <field property="userName" depends="required"> <arg key="label.username"/> </field> <field property="passWord" depends="required,maxlength"> <arg0 key="label.password"/> <arg1 name="maxlength" key="${var:maxlength}" resource="false"/> <var> <var-name>maxlength</var-name> <var-value>8</var-value> </var> </field> <field property="phone" depends="required,mask"> <arg key="label.phone"/> <var> <var-name>mask</var-name> <var-value>^[0-9]*$</var-value> </var> </field> </form> <form name="/editregister"> <field property="userName" depends="required"> <arg key="label.username"/> </field> <field property="passWord" depends="required,maxlength"> <arg0 key="label.password"/> <arg1 name="maxlength" key="${var:maxlength}" resource="false"/> <var> <var-name>maxlength</var-name> <var-value>8</var-value> </var> </field> <field property="phone" depends="required,mask"> <arg key="label.phone"/> <var> <var-name>mask</var-name> <var-value>^[0-9]*$</var-value> </var> </field> </form>
|
上面form的name属性已不再是struts-config.xml中定义的form的name,而是其中定义的
action
的
path
属性值。
1.1.4.解决这个问题,Validator提供了两个附加的ActionForm子类,它使你能够将验证与操作相关联,而不是与Form Bean相关联。这样你就可以根据哪个操作正在使用Form Bean来指定把哪些验证用于该Form Bean了。这样你可以再你的FormBean中任意修改你的验证规则。对于ActionForm你要在validate()方法中编写自己的验证规则。有如上面所述注册表单和修改表单由于验证规则相同,这时候你可以将这个Form放在struts_config.xml配置文件中的不同Action下面,例如:
<action path="/ editregister " type="somePackage.someActionClass"> name=" registerForm " input="someJSP.jsp" <forward name="successful" path="someJSP.jsp"/> <forward name="failed" path="someOtherJSP.jsp"/> </action>
<action path="/ register " type="somePackage.someActionClass"> name=" registerForm" input="someJSP.jsp" <forward name="successful" path="someJSP.jsp"/> <forward name="failed" path="someOtherJSP.jsp"/> </action>
这样做也相当方便。使用ActionForm验证的前提是你的验证机制很复杂,否则你可以完全使用struts validation插件给你提供的验证机制。只不过配置起来对于新手不容易上路。但是多试几次就好了。学无止境
2.创建Validation.xml 下面介绍一下validation.xml配置文件的标签: <form-validation></form-validation>是总框架 <formset></formset>是对Form里的数据进行配置 <form name="ActionForm对应的名称"></form>对一个ActionForm里的数据进行验证配置 <field property="ActionForm里的属性名" depends="验证规则,可以是Validation-rules里定义好的也可以是自定义的验证规则">这里配置一个属性的验证内容 <arg0 name="对应的验证规则名称" key="可以直接填入数值,也可填入变量表达式:${var:变量名}" resource="true/false"(代表是否从资源文件中读取信息,否则Key的值以参数的形式返回)> <var></var>定义一个变量的标签体,可以在里面具体设置变量的名称以及数值 <var-name>对应Key里定义的变量名称</var-name> <var-value>值</var-value> <msg name="对应的验证规则名称" key="资源文件中定义的变量名称">这里定义了信息变量后,会默认定义的信息变量。 在验证规则中大部分可以使用已经预定义好的规则,它们在validator-rules.xml里,当然我们自己也可以定义规则。
其实,这个文件名可以是任意的,可以起成别的名字,比如:validators.xml,不过,也要相应修改struts-config.xml文件中的加入validator框架PlugIn中的value属性。这个value属性用来指定validator-rules文件和具体的验证文件。
1)根元素: validators.xml文件的“根元素(Root)”是form-validation, 意味着整个文件的内容包含在“<form-validation>”和“</form-validation>”之间,
2)元素global: 这个东西包含constant子元素,用来定义一个全局的“验证限制”, 以便在这个文件的其他地方使用这些验证规则。 例如:
<global> <constant> <constant-name>userName</constant-name> <constant-value>^/s*[/w-]{0,30}$</constant-value> </constant> <constant> <constant-name>password</constant-name> <constant-value>^/s*[./w@#!$%^*()-]{6,20}/s*$</constant-value> </constant> <constant> <constant-name>email</constant-name> <constant-value>^/s*([A-Za-z0-9]+(/./w+)*@([/w-]+/.)+/w{2,3})/s*$</constant-value> </constant> </global>
完整实例如下: <form-validation> <global> <constant> <constant-name>userName</constant-name> <constant-value>^/s*[/w-]{0,30}$</constant-value> </constant> <constant> <constant-name>password</constant-name> <constant-value>^/s*[./w@#!$%^*()-]{6,20}/s*$</constant-value> </constant> <constant> <constant-name>email</constant-name> <constant-value>^/s*([A-Za-z0-9]+(/./w+)*@([/w-]+/.)+/w{2,3})/s*$</constant-value> </constant> </global> <formset> <form name="employeeActionForm"> <field property="vname" depends="required,maxlength"> <arg0 key="employee.name"/> <arg1 name="maxlength" key="${var:maxlength}" resource="false"/> <var> <var-name>maxlength</var-name> <var-value>10</var-value> </var> </field> <field property="vsex" depends="required,maxlength"> <arg0 key="employee.sex"/> <arg1 name="maxlength" key="${var:maxlength}" resource="false"/> <var> <var-name>maxlength</var-name> <var-value>5</var-value> </var> </field> <field property="vage" depends="required,integer,intRange"> <arg0 key="employee.age"/> <arg1 name="intRange" key="${var:min}" resource="false"/> <arg2 name="intRange" key="${var:max}" resource="false"/> <var> <var-name>min</var-name> <var-value>1</var-value> </var> <var> <var-name>max</var-name> <var-value>100</var-value> </var> </field> <field property="vmoney" depends="integer"> <arg0 key="employee.money"/> </field> </form> </formset> </form-validation>
|
转载http://java.chinaitlab.com/base/741350.html