- 浏览: 684206 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (297)
- J2SE (78)
- swt/飞信 (20)
- mysql/mssql (17)
- 设计模式 (5)
- windows (18)
- 闲言碎语 (19)
- struts 1.x (6)
- JVM (6)
- tomcat/jetty (8)
- jquery/javascript (15)
- web前端 (6)
- J2EE (0)
- PHP (6)
- 算法设计 (17)
- 数据结构 (3)
- C/C++ (6)
- linux (19)
- 程序打包 (8)
- eclipse/myeclipse (10)
- 其他杂项 (13)
- 应聘 (9)
- spring/spring mvc (4)
- Maven/Ant (2)
- ERROR (1)
- nosql/hbase (1)
- hibernate (3)
- Solr/Lucene (1)
最新评论
-
乔木1937:
太感谢了,看到你的文章终于解决这个问题了!
[转载]通过端口 1433 连接到主机 localhost 的 TCP/IP 连接失败。错误:“Connection refused: connect。 -
xianweisi:
竟然还有马
精简JRE - 实例Swing计算器 with 精简JRE(续) -
Javkburd:
我刚也遇到这个问题,然后也把默认端口改成了1433,只差最后没 ...
[转载]通过端口 1433 连接到主机 localhost 的 TCP/IP 连接失败。错误:“Connection refused: connect。 -
yeshaoting:
kingbinchow 写道 最近的爪哇岛 没有什么货进项呀 ...
jQuery方法区别(四)click() bind() live() delegate()区别 -
kingbinchow:
最近的爪哇岛 没有什么货进项呀!
jQuery方法区别(四)click() bind() live() delegate()区别
Validator框架配置
1. 标准ActionForm与动态ActionForm
标准ActionForm: org.apache.struts.action.ActionForm
动态ActionForm: org.apache.struts.action.DynaActionForm
以用户登录为例:
表单需要提交三个字段用户名(username),密码(password),验证码(code)
标准ActionForm配置方法:
<form-beans>
<form-bean name="loginForm" type="com.iteye.jarg.LoginForm" />
</form-beans>
com.iteye.jarg.LoginForm类内容:
public class LoginForm extends ActionForm
{
private String username;
private String password;
private String code;
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;
}
public String getCode()
{
return code;
}
public void setCode(String code)
{
this.code = code;
}
}
优点:
相对灵活
方便扩展对表单进行验证,可以对表单进行验证,灵活重置表单,可以处理跨页面表单
缺点:
1. 对于不同的表单,对应地需要添加一个ActionForm,导致ActionForm过多
2. 当页面表单字段名或者个数需要修改时,需要修改代码(这是一种硬编码方式)
动态ActionForm配置方法:
<form-beans>
<form-bean name="loginForm" type="org.apache.struts.action.DynaActionForm">
<form-property name="username" type="java.lang.String"></form-property>
<form-property name="password" type="java.lang.String"></form-property>
<form-property name="code" type="java.lang.String"></form-property>
</form-bean>
</form-beans>
优点:
a) 动态Actionform减少了繁多的ActionForm
b) 当页面表单字段名或者个数需要修改时,只需要修改配置文件,无须进行硬编码
缺点:
不够灵活
无法对表单进行验证,无法灵活对表单进行重置,无法处理跨页面表单
2. Validator框架引入
对于上述动态ActionForm验证问题,现在可以使用Validator框架.
同样,对于标准ActionForm验证,可以避免硬编码,将validator()验证部分从ActionForm移到配置文件中.
需要验证框架的理由:
如果在ActionForm类中提供验证逻辑(validation logic)。采用这种做法时,你必须为每个你想验证的性质编写单独的验证逻辑。如果检测到某个错误,你得自行创建一个ActionError对象,将其加进ActionErrors集合中。虽然这种做法行得通,但存在着一些问题。
第一个问题是你得在每个ActionForm类中编写验证逻辑,这会让整个应用程序到处都是冗余的验证逻辑。对单一的Web 应用程序而言,各种 HTML表单所需要做的验证都非常类似。举例来说,应用程序中有许多地方常常都要验证必要的字段是否有值,以及要验证日期、时间以及数字,等等。大多数有用(nontrivial)的应用程序都会拥有多份HTML 表单,让用户输入必须经过验证的数据。即使整个应用程序只用到一个ActionForm对象,你还是得针对不同的性质分别创建重复的验证逻辑。
第二个主要的问题是维护困难。如果你要修改或改进ActionForm里的验证逻辑,必须重新编译源代码。如此一来,应用程序的配置会很麻烦。
有了Validator框架,你就可以把验证逻辑从ActionForm全面撤出,并且通过外部的XML文件以声明的方式来为应用程序配置所需的验证逻辑。 没有什么验证逻辑是非得放在ActionForm里不可的,因此应用程序的开发和维护就会变得较为容易。Validator的另一个突出优点是它具有很高的扩展性;它本身就提供有很多验证规则,即使你需要其他的验证规则,也能很容易地扩展此框架,从而把你自己所写的规则加进来(而不用去修改你的应用程序)。
<!--[endif]-->
优点:
a) 避免硬编码,验证内容放在配置文件
b) 内置一些验证方法,方便验证,代码可复用,移植性好
c) 验证规则易扩展
3. Validator与Struts集成
Validator框架以Struts插件的形式与Struts集成.
在配置文件struts-config.xml中配置插件Validator框架,其中value值/WEB-INF/validator-rules.xml和/WEB-INF/validation.xml分别表示默认的验证规则定义,以及针对当前Struts应用的使用,关联表单验证规则.
<plug-in className="org.apache.struts.validator.ValidatorPlugIn">
<set-property property="pathnames" value="/WEB-INF/validator-rules.xml,/WEB-INF/validation.xml" />
</plug-in>
4. Validator框架验证
Validator框架不能用于验证标准的org.apache.struts.action.ActionForm类.如果要使用Validator框架,应该采用ActionForm类的两个子类:org.apache.struts.validator.ValidatorForm,org.apache.struts.validator.DynaValidatorForm.
DynaValidatorForm支持在动态ActionForm中使用Validator框架,ValidatorForm支持在标准ActionForm中使用Validator框架.无论是对于动态ActionForm还是标准ActionForm,配置Validator框架的方式都是一样的.
DynaValidatorForm与ValidatorForm类都实现了validate()方法,所以当创建它们的子类时,不必覆盖validate()方法.
ValidatorForm有一个子类ValidatorActionForm.这二个类的区别:
若<form-bean>使用org.apache.struts.validator.ValidatorForm,则validation.xml中<form>标签name属性与struts-config.xml中<action>标签name属性相应.
使用ValidatorForm类配置
<form-beans>
<form-bean name="loginForm" type="org.apache.struts.validator.ValidatorForm" />
</form-beans>
<action-mappings>
<action input="/index.jsp" path="/user" name="loginForm" validate="true" type="com.iteye.jarg.action.UserAction" scope="request">
<forward name="success" path="/WEB-INF/jsp/success.jsp"></forward>
<forward name="failure" path="/WEB-INF/jsp/failure.jsp"></forward>
</action>
</action-mappings>
表单验证配置文件validation.xml
<form name="loginForm">
<field property="username" depends="required,minlength">
<arg0 key="login.username" />
<arg1 key="${var:minlength}" resource="false" />
<var>
<var-name>minlength</var-name>
<var-value>6</var-value>
</var>
</field>
</form>
若<form-bean>使用org.apache.struts.validator.ValidatorActionForm,则validation.xml中<form>标签name属性与struts-config.xml中<action>标签path属性相应.
使用ValidatorActionForm类配置
<form-beans>
<form-bean name="loginForm" type="org.apache.struts.validator.ValidatorActionForm" />
</form-beans>
<action-mappings>
<action input="/index.jsp" path="/user" name="loginForm" validate="true" type="com.iteye.jarg.action.UserAction" scope="request">
<forward name="success" path="/WEB-INF/jsp/success.jsp"></forward>
<forward name="failure" path="/WEB-INF/jsp/failure.jsp"></forward>
</action>
</action-mappings>
表单验证配置文件validation.xml
<form name="/user">
<field property="username" depends="required,minlength">
<arg0 key="login.username" />
<arg1 key="${var:minlength}" resource="false" />
<var>
<var-name>minlength</var-name>
<var-value>6</var-value>
</var>
</field>
</form>
Validator框架提供这两种类的目的在于可以更加精确地控制执行验证的条件.
因为有些ActionForm Bean可能会对应多个Action,这种情况则可以通过path作为<form>标签name属性来区分.
对于动态ActionForm,也有DynaValidatorForm和DynaValidatorActionForm之分,它们的区别与ValidatorForm和ValidatorActionForm的区别一样.
5. validator-rules.xml与validition.xml
Struts框架能够在ActionForm Bean的validate()方法中对用户输入的表单数据进行验证。这种验证有两个局限:
必须通过程序代码来实现验证逻辑。如果验证逻辑发生变化,必须重新编写和编译程序代码。
当系统中有多个ActionForm Bean,并且他们包含一些相同的验证逻辑时,开发人员必须对每个ActionForm Bean进行重复编程,完成相同的验证逻辑。这会降低代码的可重用性。
如今,Validator框架在struts应用中得到广泛的运用,Apache组织已经把它添加到Jarkarta工程中,在struts软件中系带了Validator框架。Validator框架主要依赖两个jar文件:
jakarta-oro.jar,提供一组处理文本的类,具有文本替换,过滤和分割等功能。
commons-validator.jar,提供了一个简单的,可扩展的验证框架,包含了通用的验证方法和验证规则。
也可以从http://jakarta.apache.org/commons/下载单独的Validator框架软件。
1 validator-rules.xml文件
validator-rules.xml包含了一组通用的验证规则,对所有的struts应用都适用。struts软件中自带了这个文件。一般情况下没有必须要修改该文件,除非需要修改或扩展默认的规则。如果想扩展默认的验证规则,最好把自定义的客户规则放在另一个xml文件中,而不是直接添加到validator-rules.xml中。
validator-rules_1_1.dtd定义了validator-rules.xml文件的语法:validator-rules.xml文件的根元素为<form-validation>,它可以包含一个或多个<global>元素,<global>元素可以包含一个或多个<validator>元素。
每个<validator>元素定义一个唯一的验证规则。例:
<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.ActionMessage,
javax.servlet.http.HttpServletRequest"
msg="errors.required">
</validator>
<validator>元素有7个属性,它们在DTD的顺序为:
name,classname,method,methodParams,msg,depends,jsFunctionName
name,指定验证规则的逻辑名,这个名字必须是唯一的。
classname和method属性,分别指定实现验证规则逻辑的类和方法。对于以上required验证规则,由FieldChecks类的validateRequired()方法来实现。
methodParams属性用来指定验证的方法包含的参数,多个参数之间以逗号隔开。
msg,指定来自于Resource Bundle中的消息key。当验证失败时,validator框架将根据这个消息key到Resource Bundle中查找匹配的消息文本。
depends,指定在调用当前验证规则之前必须先调用的其他验证规则。如:以下minLength验证规则的配置代码中就使用了depends属性 ,表明在调用minLength验证规则之前,应该先调用required规则。
<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.ActionMessage,
javax.servlet.http.HttpServletRequest"
depends="required"
msg="errors.minlength">
</validator>
如果depends属性包含多个验证规则,则用逗号隔开。如:
depends="required,integer"
如果depends属性指定的验证规则时验证失败,就不会在调用下一个规则。
2 Validator的验证规则
Validator框架提供了基本的,通用的验证规则,对struts应用以及非struts应用都适用。org.apache.commons.validator.GenericValidator类提供了一组实现这些规则的静态方法:
isBlankOrNull,验证字段是否为null或长度是否为0
isByte,验证字段是否可以被转换为有效的byte类型的数据
isCreditCard,验证字段是否为有效的信用卡号
isDate,验证是否为有效的日期
isDouble,验证字段是否可以被转换为有效的double类型的数据
isEmail,验证字段是否为有效的Email地址
isFloat,验证字段是否可以被转换为有效的float类型的数据
isInRange,验证字段是否介于最小值或最大值之间。
isInt,验证字段是否可以被转换为有效的int类型的数据
isLong,验证字段是否可以被转换为有效的long类型的数据
isShort,验证字段是否可以被转换为有效的short类型的数据
maxLength,验证字段是否小于或等于最大值
minLength,验证字段是否大于或等于最小值。
mathRegexp,验证字段是否和一个给定的Jakarta正规表达式匹配。与validateMask一个意思。
Jakarta正规表达式,如:
^[a-zA-Z]*$表示字符串必须只包含字母
^\d{5}\d*$表示字符串必须是五位数字
在struts框架中定义了专门用于验证表单字段的org.apache.struts.validator.FieldChecks类,它提供了和GenericVaidator类似的方法,以下是FieldChecks类包含的验证方法:
validateByte
validateCreditCard
validateDate
validateDouble
validateEmail
validateFloat
validateInteger
validateLong
validateMinLength
validateMaxLength
validateRange
validateRequired
validateShort
validateMask
在对表单字段进行验证时,会调用FieldChecks类的相关方法,如果验证失败,就会创建包含错误消息的ActionMessage对象,并把该对象添加到ActionMessage集合对象中。
3 validation.xml文件
Validate框架的第二个配置文件为validation.xml。这个文件是针对某个具体struts应用的,需要开发人员来创建,它可以应用中的ActionForm配置所需的验证规则,取代ActionForm中以编程的方式来实现验证逻辑。
<form-validation>元素
validator_1_3_0.dtd描述了validation.xml文件的语法。validation.xml文件的根元素为<form-validation>元素,它包含两个子元素:<global>和<formset>。<global>元素可以出现零次或多次,而<formset>元素可以出现一次或多次。它们的DTD定义顺序:global,formset
<global>元素
在<global>元素中可以定义<constant>子元素,它用来定义常量表达式,在文件的其余地方可以引用这些常量表达式。如:
<global>
<constant>
<constant-name>phone</constant-name>
<constant-value>^\d{8}\d*$</constant-value>
</constant>
</global>
以上代码定义了常量phone,在<formset>元素中可以通过${constant-name}的形式来引用它们。(${phone})
<formset>元素
<formset>元素包含两个子元素:<constant>和<form>。<constant>可以出现零次或多次;<form>元素可以出现一次或多次。
在<global>中定义的<constant>元素代表全局常量,而在<formset>元素中定义的<constant>元素代表局部常量,后者只能在当前<formset>元素中使用。
<form>元素
<formset>元素的<form>子元素用于为表单配置验证规则。它的name属性指定了表单的名字(它的取值将与配置文件中的action中的name属性或attribute属性取值一样)<form>元素可以包含一个或多个<field>子元素。
*****************************
在一般情况下,actionForm是被存储在一定的scope中(request或session,通过action的scope属性来配置),当我们在配置时,指定name而不指定attribute,那么指定的name值就作为actionForm存储在scope中的key值,我们可以在action中通过httpServletRequest.getAttribute("指定的name属性值")来获得这个actionForm;当我们既配置了name又配置了attribute,那么actionForm存储在scope中的key值就采用attribute属性指定的值了,这时要通过httpServletRequest.getAttribute("指定的attribute属性值")来获得actionForm,此时通过httpServletRequest.getAttribute("指定的name属性值")是不能获得actionForm的。
所以,是否配置attribute属性就决定了actionForm存储在scope中的key值是采用name,还是采用attribute。当我们配置了attribute属性那么我们就要让<form>的name取值为attritute属性的值否则取name属性的值会提示类似以下的错误:
form 'user' is not found in 'zh_CN'
***************************
<field>元素
<form>元素的<field>子元素用于配置表单中字段的验证规则。<field>元素的属性:
property,指定ActionForm Bean中需要进行验证的字段的名字。
depends,指定字段的验证规则,多个规则之间以逗号隔开。
<field>元素包含一些子元素,它的DTD定义如下:
<!element field(msg?,arg?,var*)>
<msg>元素指定验证规则所对应的消息文本,该消息文本将替换validator-rules.xml文件中配置的默认消息文本。例如:
<field property="phone" depends="required,mask,minlength">
<msg name="mask" key="phone.Invalidformat"/>
...
</field>
<msg>元素的属性:
name,指定验证规则(minlength,mask,maxlength等)的名字
key,当resource属性为true时,key属性指定消息key,该消息key应该在Resource Bundle中存在。
resource,当此项为true时,表示使用来自Resource Bundle的消息,如果为false,表示直接在key属性中设置消息文本。默认为true。
<arg>元素,用于替换复合消息中的参数,<arg>的position属性指定了它的替换位置(从0开始)。每个arg元素包含三个属性:name,key和resource。这些属性的用法和<msg>元素很相似。如果没有指定name则将应用于depends所指定的所有验证规则。strut1.3以前的版本使用arg0,arg1,arg2...元素来指定符合消息中的参数,而没有position属性。
例如:
<field property="age" depends="intRange">
<arg key="test.age" position="0" resource="true"/>
<arg key="${var:min}" name="intRange" position="1" resource="false"/>
<arg key="${var:max}" name="intRange" position="2" 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="logName"
depends="required,minlength,maxlength">
<arg key="Form.logname" position="0"/>
<arg name="minlength" key="6" position="1" resource="false"/>
<arg name="maxlength" key="10" position="1" resource="false"/>
<var>
<var-name>minlength</var-name>
<var-value>6</var-value>
</var>
<var>
<var-name>maxlength</var-name>
<var-value>10</var-value>
</var>
</field>
要知道一个xml文件怎样写,查看dtd就可以了,在xml文件的开始都会有引用
http://jakarta.apache.org/commons/dtds/validator_1_1_3.dtd
上面没有配置<msg>元素,如果minlengt6h验证规则失败,将用validator-rules.xml中的配置默认消息文本(errors.minlength匹配的消息),errors.minlength因为为:
errors.minlength={0}不能少于{1}字符。
{0},{1}分别与<arg positon="0">,<arg position="1">相对应。
<var>元素
<field>元素还可以包含零个或多个<var>元素,<var>元素用来验证规则传递参数。
如phone常量被传递给mask验证规则:
<var>
<var-name>mask</var-name>
<var-value>${phone}</var-value>
</var>
phone常量的值为^\d{8}\d*$它定义一种字符模式,表示字符长度为8位,并只有数字。
arg元素可以引用<var>元素的值${var:varname}。如:${var:minlength}
例如,一个简单validation.xml文件样例
<form-validation>
<!--定义一个全局的常量-->
<global>
<constant>
<constant-name>phone</constant-name>
<constant-value>^\d{8}\d*$</constant-value>
</constant>
</global>
<formset>
<!--要进行验证的表单的名字-->
<form name="checkoutForm">
<!--要对表单中的名称为phone的字段进行required,mask,minlength三项验证-->
<field property="phone" depends="required,mask,minlength">
<!--定义向复合消息要传递的两个参数arg0和arg1-->
<arg key="label.phone" position="0"/>
<arg name="minlength" key="${var:minlength}" position="1" resource="false"/>
<!--定义要向验证规则传递的参数-->
<var>
<var-name>mask</var-name>
<var-value>${phone}</var-value>
</var>
<var>
<var-name>minlength</var-name>
<var-value>7</var-value>
</var>
</field>
</form>
</formset>
</form-validation>
Validator插件
为了在struts框架中使用Validator,可以采用插件机制把Validator加入到框架中,这需要在
struts-config.xml中配置ValidatorPlugIN插件,代码如下:
<plug-in className="org.apache.struts.validator.ValidatorPlugin">
<set-property property="pathnames"
value="/org/apache/struts/validator/validator-rules.xml,/WEB-INF/validation.xml"/>
</plug-in>
当应用启动时,struts框架会加载ValidatorPlugin插件并调用它的init()方法,init()方法根据pathnames属性,加载相应的validator-rules.xml和validation.xml文件,把验证信息读入到内存中。
***************
/org/apache/struts/validator/validator-rules.xml表明validator-rules.xml已经被包含在struts软件中,我们只需要制作validation.xml
用户在提交后进行表单的验证(validator),如果验证失败是不会执行任何语句的,而是直接跳转到input所指定的文件。
****************
4 Validator框架和ActionForm
Validator不能用于验证标准的org.apache.struts.action.ActionForm类,如果要使用Validator框架,应该采用ActionForm类的两个子类:org.apache.struts.validator.DynaValidatorForm和org.apache.struts.validator.ValidatorForm.
DynaValidatorForm支持在动态ActionForm中使用Validator框架,ValidatorForm支持在标准ActionForm中使用Validator框架。无论对于动态的ActionForm还是标准ActionForm,配置Validator框架的方式都是一样的。
DynaValidatorForm和ValidatorForm类都实现了validate()方法,所以当创建它们的子类时,不必在覆盖validate()方法。如果验证失败,就会创建包含错误消息的ActionMessage对象,并把该对象添加到ActionErrors集合对象中。validate()方法最后返回ActionErrors集合对象。(注意在返回的ActionErrors集合对象中,用ValidatorForm的属性名作为ActionMessage对象的key).如:只输出某个属性的错误
<html:errors property="age"/>
注意,在使用Validator框架时,<html:errors/>标签的property属性的值就是ActionForm(或其子类)属性名,并将与之对应。
ValidatorForm有一个子类ValidatorActionForm。这两种类的区别:
ValidatorForm中
Struts配置文件的<action>元素的name属性与validation.xml的<form>元素的name属性对应
ValidatorActionForm中
Struts配置文件的<action>元素的path属性与validation.xml的<form>元素的name属性对应
对于动态的ActionForm,也有DynaValidatorForm和DynaValidatorActionForm之分,与上面的区别一样。
DynaVlidatorForm或ValidatorForm类的流程与标准的ActionForm一样,RequestProcessor调用它们的validate()方法进行表单验证。如果验证失败,***注意RequestProcessor就把validate()方法返回的ActionErrors()对象保存在request范围内。***struts的一些客户化的标签能够和Validator框架协同工作,其中<html:errors/>和<html:message>标签都能够访问request范围内的ActionMessages或其子类ActionErrors对象,用于显示Validator框架生成的验证错误消息。
***********************************************************************************
综上所述,我们首先需要续写一个ValidatorForm或DynaValidatorForm或ValidatorActionForm或DynaValidatorActionForm的子类(我使用ValidatorForm),其内容和编写ActionForm子类差不多。
然后就需要编写好validation.xml,再在struts-config.xml加上Validator插件
最后输出显示ActionErrors集合中的错误信息
Validator框框架使用的默认消息文本也应该添加到应用的Resource Bundle中。如:
errors.required={0}是必须的。
errors.minlength={0}不能少于{1}字符。
errors.maxlength={0}不能多于{1}字符。
errors.invalid={0}无效
errors.byte={0}必须为byte类型
errors.short={0}必须为short类型
errors.integer={0}必须为integer类型
errors.long={0}必须为long类型
errors.float={0}必须为float类型
errors.double={0}必须为double类型
errors.date={0}不是有效的日期类型
errors.range={0}不再范围{1}和{2}之间
errors.creditcard={0}不是有效的信用卡号
errors.email={0}不是有效的Email地址
******************************************************************************************
列出了Validator框架预定义的验证:
Validator 变量
required
validwhen test 验证test条件是否成立,如果不成立则会添加到ActionErrors
minlength minlength
maxlength maxlength
mask mask
byte,short
integer,long 验证字段是否可以被转换为相应的类型数据
float,double
date datePattern或datePatternStrict 验证字段是否可以按指定的格式被转换为日期类型数据
validator将使用java.text.SimpleDatFormat来转换日期。例如:
<field property="saledate" depends="required,date">
<arg key="myForm.saledate" position="0"/>
<var><var-name>datePattern</var-name>
<var-value>MM/dd/yyyy</var-value></var>
</field>
<field property="saledate" depends="required,date">
<arg key="sale.orderdate" position="0"/>
<var><var-name>datePatternStrict</var-name>
<var-value>MM/dd/yyyy</var-value></var>
</field>
datePattern或datePatternStrict区别在于datePatternStrict要求长度相同,如1/1/2004在datePatternStrict的MM/dd/yyyy中验证将会失败,但datePattern可以通过。
intRange min,max
floatRange min,max
doubleRange min,max
creditCard 验证字段是否是一个信用卡号
url allowallschemes,allow2slashed,nofragments,schemes 验证字段是否是一个URL
allowallschemes定义是否所有的协议都允许。取值为true或false,默认为false
allow2slashes定义是否要求//字符,取值为true或false,默认为false.
nofragments定义是否可以分段,取值为true或false,默认为false,可以分
shemes,用逗号分隔要用到的协议。默认取值为http,https,ftp
return mapping.getInputForward();
例如使用validawhen的例子
<field property="password"
depends="required,minlength,maxlength">
<arg key="lable.password" position="0" />
<var>
<var-name>minlength</var-name>
<var-value>5</var-value>
</var>
<var>
<var-name>maxlength</var-name>
<var-value>16</var-value>
</var>
</field>
<field property="repeatedPassword" depends="validwhen">
<arg key="password.notequals.repeated" positon="0" />
<var>
<var-name>test</var-name>
<var-value>(password==repeatedPassword)</var-value>
</var>
</field>
其实可以用*this*替代repeatedPassword:
<var-value>(password==*this*)</var-value>
http://java.chinaitlab.com/Struts/776627_2.html
http://java.chinaitlab.com/Struts/776213_2.html
http://java.chinaitlab.com/Struts/776220.html
http://www.jarbao.com/jar/jakarta-oro-2.0.8.jar.html/hebinbin71722@126.com/123456
6. 显示验证消息
<html:messages>
<html:errors property="待验证的字段name值">
e.g.若对username进行字符长度不小于6的验证时,验证失败后的错误消息则显示在<html:errors property="username" />中.
<input type="text" name="username" value="admin" />
<html:errors property="username" />
为了达到消息弹出目的,可以设置资源包中消息键errors.required值为:
<script type="text/javascript">alert("{0} 不能为空")</script>
值得注意的是:
1. 如果使用自定义的资源包,则需要在资源包中加入如下键;否则,会报找不到消息资源错误.
<!--
These are the default error messages associated with
each validator defined in this file. They should be
added to your projects ApplicationResources.properties
file or you can associate new ones by modifying the
pluggable validators msg attributes in this file.
# Struts Validator Error Messages
errors.required={0} is required.
errors.minlength={0} can not be less than {1} characters.
errors.maxlength={0} can not be greater than {1} characters.
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.
-->
2. 未加入到资源包中的错误消息,也可能通过<msg name="required" key="my.errors.required" />标签在validation.xml的<field>标签下设置,其中,name对应于validator.xml中定义的规则名.
发表评论
-
[学习笔记]Struts国际化 - 消息资源
2011-07-31 12:16 1568第一步 资源包内容( ... -
Cannot find message resources under key org.apache.struts.action.MESSAGE
2011-07-31 11:34 1355对于我自己程序的问题的解决办法: 在web.xml文件Str ... -
org.apache.struts.taglib.TagUtils.retrieveMessageResource
2011-05-29 16:37 3008今天使用<bean:message />标签的时候 ... -
[转载]The content of element type "struts-config" must match
2011-05-11 21:57 1287完全解决struts启动时报错:The co ... -
[转载]Cannot find message resources under key org.apache.struts.action.MESSAGE
2011-05-11 20:19 1610新建个项目,显示long类型字段的时候报错:Canno ...
相关推荐
本学习笔记主要探讨了Struts2中的校验器(Validator)和校验框架,帮助开发者理解如何有效地实现数据验证,确保应用程序的健壮性。 首先,我们来看Struts2的校验框架。这个框架提供了强大的功能,可以对用户输入...
在尚硅谷的2022年学习笔记中,可能包含了以下实战内容: - **HelloWorld示例**:创建一个简单的Controller,处理GET请求,返回“Hello, World!”。 - **模型数据传递**:演示如何将模型数据绑定到视图,并在页面上...
【SpringMVC+Mybatis学习笔记】 SpringMVC和Mybatis是Java开发中常见的两个框架,它们分别负责Web层和持久层的管理。SpringMVC是Spring框架的一部分,提供了强大的模型-视图-控制器(MVC)架构模式,用于构建高性能...
Struts2是一个强大的Java web应用程序框架,用于构建和维护可扩展、高效且易于维护的Web应用。本讲主要探讨Struts2的校验框架,它提供了对用户输入数据进行验证的功能,确保数据的有效性和安全性。 在传统的MVC模式...
Java学习笔记涵盖了多个核心的Java开发技术,包括Spring、Hibernate和Struts,这些都是Java Web开发中的重要框架。让我们深入探讨一下这些技术。 首先,Java是一种广泛使用的编程语言,以其跨平台性和面向对象的...
在实践中,我们还会遇到如 ActionForward、ActionMapping、Validator框架、国际化资源文件等概念,这些都是 Struts 1.3.8 中的重要组成部分。同时,Struts 还提供了丰富的工具,如 Struts-DevTools 插件,可以帮助...
在深入探讨Struts2的学习笔记之前,先来理解它的核心概念。 **1. Struts2依赖的JAR包** Struts2的运行离不开一系列的依赖库,包括: - `struts2-core-2.1.6.jar`:这是Struts2的核心库,包含了Struts2框架的主要...
Struts是Java Web开发中的一款经典MVC框架,由Apache...以上是对Struts学习笔记的简要概括,深入学习Struts,不仅可以提升Web开发技能,还能更好地理解MVC模式以及框架的设计思想,对后续学习其他Web框架也会有所帮助。
这篇学习笔记和测试源代码着重探讨了如何使用XML配置来实现对Action中特定方法的输入验证。 在Struts2中,输入验证是一个关键的环节,它确保用户提交的数据符合应用程序的要求,防止非法或无效数据进入系统。Struts...
Struts2是一个强大的Java web开发框架,它极大地简化了MVC(模型...学习并熟练掌握这一框架,对于提升Java web开发的效率和质量具有重要作用。在实际开发中,结合源码阅读和工具使用,可以更好地理解和应用这些知识点。
总的来说,这份"SpringMVC学习笔记+学习源码.zip"资源涵盖了SpringMVC的基本概念、配置、控制器、数据绑定、异常处理、视图解析等多个方面的内容,对于初学者和有一定经验的开发者都是很好的学习资料。通过深入学习...
当用户访问`HelloWorld.action`时,Struts2框架会根据配置文件创建`HelloWorld`实例,并调用`execute()`方法。执行完成后,结果(在这种情况下是`SUCCESS`)将决定哪个结果配置会被执行,这里是显示`HelloWorld.jsp`...
Struts是Apache软件基金会 ...学习Struts1.2,不仅可以了解早期Web框架的设计思想,还能为学习其他现代框架如Spring MVC、Struts2等打下基础。通过阅读"Struts1.2笔记",可以深入理解这些概念,进一步提高Web开发技能。
**Spring MVC 学习笔记** Spring MVC 是 Spring 框架的一个模块,专门用于构建 Web 应用程序。它提供了一种模型-视图-控制器(Model-View-Controller)架构,帮助开发者处理请求、控制应用程序流程,并实现业务逻辑...
这个“springmvc学习笔记.zip”文件很可能包含了关于如何理解和使用SpringMVC的详细教程或个人学习记录。以下是一些核心知识点的详细说明: 1. **MVC架构**:MVC是一种设计模式,将应用程序分为三个主要组件:模型...
从给定的文件信息来看,这里涉及到的是WebWork框架的学习笔记与配置,以及如何将WebWork与Spring、Hibernate集成在一起的示例。下面,我们将详细地解析这些知识点: ### WebWork框架简介 WebWork是一个开源的Java ...