常量有两种:一种是全局范围常量。一种是某个
formset
范围的常量。位置如下:
格式如下:
<form-validation>
<global>
<constant>
<constant-name>globalVarName</constant-name>
<constant-value>globalVarValue</constant-value>
</constant>
</global>
<formset>
<constant>
<constant-name>formsetVarName</constant-name>
<constant-value>formsetVarValue</constant-value>
</constant>
<form name="MyForm">
<field property="myfield"
depends="someRule,anotherRule">
<var>
<var-name>someRule</var-name>
<var-value>${globalVarName}</var-value>
</var>
<var>
<var-name>anotherRule</var-name>
<var-value>${formsetVarName}</var-value>
</var>
</field>
</form>
<formset>
<form-validation>
如果你有多个
field
元素要用到同一个值,则可以定义一个这个值的常量,这样就可以应用这个常量了
如果这个常量作用于整个应用程序则生命为
global
范围的常量。如果这个常量只作用于某个特定的
form
且被重复使用,则的定义它为
formset
范围的常量。举例如下:
<form-validation>
<global>
<constant>
<constant-name>usernameMinLength</constant-name>
<constant-value>7</constant-value>
</constant>
</global>
<formset>
<constant>
<constant-name>nameMaxLength</constant-name>
<constant-value>40</constant-value>
</constant>
<form name="RegistrationForm">
<field property="username"
depends="required,minlength">
<arg key="prompt.username"/>
<arg key="${var:minlength}" name="minlength"
resource="false"/>
<var>
<var-name>minlength</var-name>
<var-value>${usernameMinLength}</var-value>
</var>
</field>
<field property="firstName"
depends="required,maxlength">
<arg key="prompt.firstName"/>
<arg key="${var:maxlength}" name="maxlength"
resource="false"/>
<var>
<var-name>maxlength</var-name>
<var-value>${nameMaxLength}</var-value>
</var>
</field>
<field property="lastName"
depends="required,minlength,maxlength">
<arg key="prompt.lastName"/>
<arg key="${var:minlength}" name="minlength"
resource="false"/>
<arg key="${var:maxlength}" name="maxlength"
resource="false"/>
<var>
<var-name>minlength</var-name>
<var-value>2</var-value>
</var>
<var>
<var-name>maxlength</var-name>
<var-value>${nameMaxLength}</var-value>
</var>
</field>
</form>
<formset>
<formset-validation>
如果你使用
mask
验证规则严整表单的格式时,你只需要在一处定义这个格式的正则表达式。
n
用正则表达式验证表单字段
mask
验证规则提供了基于正则表达式的验证机制,如:
<form name="ValidationTestForm">
<!-- Validate Social Security Number -->
<field property="ssn"
depends="required,mask">
<arg key="prompt.ssn"/>
<var>
<var-name>mask</var-name>
<var-value>^[0-9]{3}-[0-9]{2}-[0-9]{4}$</var-value>
</var>
</field>
</form>
正则表达式使用通用符号描述并解析文本,使用它你可以验证数据是否符合指定的格式。
STRUTS
框架通过
mask
验证规则使用正则表达式。可以在
var
元素中指定正则表达式。
<var>
<var-name>mask</var-name>
<var-value>^[0-9]{3}-[0-9]{2}-[0-9]{4}$</var-value>
</var>
name
属性必须是
mask
,
value
指定要使用的正则表达式。如果匹配则通过验证,否则验证失败。
如果你使用struts1.1及以后的版本,那么正则表达式必须以“^”开头,以“$”结尾。
|
举例:
^[0-9]{3}-[0-9]{2}-[0-9]{4}$
理解如下:
开头一个开头符号(^),,接着是三个0到9的字符({3}),接着是连接符号,接着是两个0到9的字符([0-9]),接着是一个连接符号(-),接着是四个0到9的字符([0-9]),,接着是一个结束符号($).
n
requiredif:
在
struts1.1Z
中,如果一个字段的验证依赖于另一个字段,可用
requiredif
验证规则。
举例如下:
<!-- zipCode is required if city is null or state is null -->
<field property="zipCode" depends="requiredif">
<arg key="prompt.zipCode"/>
<var>
<var-name>field[0]</var-name>
<var-value>city</var-value>
</var>
<var>
<var-name>fieldTest[0]</var-name>
<var-value>NULL</var-value>
</var>
<var>
<var-name>field[1]</var-name>
<var-value>state</var-value>
</var>
<var>
<var-name>fieldTest[1]</var-name>
<var-value>NULL</var-value>
</var>
<var>
<var-name>fieldJoin</var-name>
<var-value>OR</var-value>
</var>
</field>
当
city
或
state
的值为空或不存在时,
zipCode
不能为空。
在
struts1.1
前要实现这样的
功能必须自己写代码进行验证。
field[i]
对应的
var-value
值代表一个表单属性:
<var>
<var-name>field[0]</var-name>
<var-value>property name</var-value>
</var>
fieldTest[i]
代表测试类型:
<var>
<var-name>fieldTest[i]</var-name>
<var-value>test type</var-value>
</var>
测试类型有以下三种:
NULL
:
字段为
NULL
或空字符串
NOTNULL
:
字段不为
NULL
或空字符串
EQUAL
:
字段值为一个指定的值
如果测试类型为
EQUAL
,则还需定义一个元素
fieldValue[i]:
<var>
<var-name>fieldValue[i]</var-name>
<var-value>literal value</var-value>
</var>
如果这个属性是一个数字的,则字面值将被转换为数值。否则字面值将当作一个字符串。
如果依赖多个字段,则须用
fieldJoin
变量确定这多个字段的逻辑关系:
<var>
<var-name>fieldJoin</var-name>
<var-value>logical operator</var-value>
</var>
合法的
value
值为
AND
和
OR
,
AND
表示所有依赖的字段都必须符合
fieldTest
规定的类型时,要验证的数据不为空;
OR
表示所依赖的字段有一个符合要求时要验证的数据不为空。
在
struts1.2
中,
requiredif
已被
validwhen
代替。
n
validwhen
:
如下例表示当下列事实发生时,
zipCode
合法有效:
1.
city
和
state
属性不为空
2.
zipCode
不为空
<form name="AddressForm">
<field property="zipCode" depends="validwhen">
<arg key="prompt.zipCode"/>
<var>
<var-name>
test
</var-name>
<var-value>
(((city != null) and (state != null)) or (*this* != null))
</var-value>
</var>
</field>
<form name="AddressForm">
validwhen
比
requiredif
功能更强大。
requiredif
表示“如果。。。这个字段不为空”。
validwhen
表示“当。。。时这个字段有效”。
*this*
符号表示要验证的字段
zipCode
。
完整的举例如下:
n
struts-config.xml:
<
action
attribute
=
"checkForm"
name
=
"checkForm"
input
=
"/validate/error.jsp"
path
=
"/validate/check"
scope
=
"request"
type
=
"cn.rolia.struts.action.validate.CheckAction"
>
<
forward
name
=
"success"
path
=
"/validate/success.jsp"
/>
</
action
>
<
form-bean
name
=
"checkForm"
type
=
"org.apache.struts.validator.DynaValidatorForm"
>
<
form-property
name
=
"zipCode"
type
=
"java.lang.String"
/>
<
form-property
name
=
"province"
type
=
"java.lang.String"
/>
<
form-property
name
=
"city"
type
=
"java.lang.String"
/>
</
form-bean
>
n
CheckAction.java:
public
ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
DynaValidatorForm checkForm = (DynaValidatorForm) form;
//
TODO
Auto-generated method stub
return
mapping.findForward(
"success"
);
}
}
n
ApplicationResources.properties:
prompt.zipCode= zipCode
errors.required={0} is required.
/validate/error.jsp:
<
body
>
<
html:errors
/><
br
>
</
body
>
n
/validate/input.jsp:
<
html:form
action
=
"/validate/check"
>
<
table
>
<
tr
>
<
td
>
所在省
</
td
><
td
><
html:text
property
=
"province"
></
html:text
></
td
>
</
tr
>
<
tr
>
<
td
>
所在市
</
td
><
td
><
html:text
property
=
"city"
></
html:text
></
td
>
</
tr
>
<
tr
>
<
td
>
邮政编码
</
td
><
td
><
html:text
property
=
"zipCode"
></
html:text
></
td
>
</
tr
>
<
tr
>
<
td
><
html:submit
value
=
"
提交
"
/></
td
><
td
><
html:reset
value
=
"
清除
"
/></
td
>
</
tr
>
</
table
>
</
html:form
>
n
/validate/success.jsp:
<
body
>
success
<
br
>
<
bean:write
name
=
"checkForm"
property
=
"zipCode"
/><
br
>
</
body
>
validation.xml:
<
form
name
=
"checkForm"
>
<
field
property
=
"zipCode"
depends
=
"validwhen"
>
<
arg0
key
=
"prompt.zipCode"
/>
<
var
>
<
var-name
>
test
</
var-name
>
<
var-value
>
(((city != null) and (province != null)) or (*this* != null))
</
var-value
>
</
var
>
</
field
>
</
form
>
n
indexedListProperty
时间验证
date
希望验证一个时间字段是否符合某个特定的格式时使用
date
验证规则。如:
<field property="date1" depends="date">
<arg key="Date1" resource="false"/>
<var>
<var-name>datePattern</var-name>
<var-value>MM/dd/yyyy</var-value>
</var>
</field>
<field property="date2" depends="date">
<arg key="Date2" resource="false"/>
<var>
<var-name>datePatternStrict</var-name>
<var-value>MM/dd/yyyy</var-value>
</var>
</field>
<field property="dateTime" depends="date">
<arg key="DateTime" resource="false"/>
<var>
<var-name>datePattern</var-name>
<var-value>MM/dd/yy HH:mm</var-value>
</var>
</field>
datePattern
变量通过使用
java.text.SimpleDateFormat
指定字段的格式。
如果
SimpleDateFormat
能将字段值转换为日期格式,则验证通过,否则验证失败。
datePatternStrict
要求字段值的长度要与模式的长度相同。
如模式为
MM/dd/yyyy
,则字段值
5/10/1963
代表
May 10, 1963
。如果使用
datePattern
则验证通过。如果使用
datePatternStrict
则验证不通过,因为也的部分是一个数字而不是格式指定的两个。
你可以使用
mask
验证对时间进行工详细的控制。