Struts2温习(8)--表单验证的两种方式
1. Struts2中的输入校验
2. 编码方式校验
? 1) Action一定要继承自ActionSupport
? 2) 针对某个要进行校验的请求处理方法编写一个 public void validateXxx()方法,在方法内部进行表单数据校验.
? 3) 也可针对所有的请求处理方法编写public void validate()方法。
? 4) 在校验方法中,可以通过addFieldError()方法来添加字段校验错误消息。
? 5) 当校验失败时,Struts框架会自动跳转到name为input的Result页面。在校验失败页面中,可以使用<s:fielderror/>来显示错误消息
? 6) 简单,灵活。但重用性不高。
?
3. XML配置方式校验。在编码方式之前被执行。
? 1) 针对要校验的Action类,在同包下编写一个名为:Action类名-validation.xml校验规则文件。
? 2) 在校验规则文件中添加校验规则:具体的校验器名,参数可参看Struts2的reference或Struts2的API。
???? a) Field校验:针对Action类中每个非自定义类型的Field进行校验的规则。
??? <field name="要校验的Field名">
???? <field-validator type="校验规则器名" short-circuit="是否要短路径校验(默认是false)">
???????? <param name="校验器要使用的参数名">值</param>
??????????? <message>校验失败时的提示消息</message>
??</field-validator>
??<!-- 还可添加其它的校验规则 -->
?</field>
?
???? b) 非Field校验:针对Action类的某些Field使用OGNL表达进行组合校验。
??? <validator type="fieldexpression">
??<param name="fieldName">pwd</param>
??? ?<param name="fieldName">pwd2</param>
??? ?<param name="expression"><![CDATA[pwd==pwd2]]></param><!-- OGNL表达式 -->
??? ?<message>确认密码和密码输入不一致</message>
?</validator>
?
???? c) visitor校验:主要是用来校验Action类中的自定义类型Field。(针对使用模型驱动方式时)
?????? i) 在Action类的的校验规则文件中针对自定义类型Field使用visitor校验规则。
??? <!-- 针对自定义Field使用visitor校验 -->
?<field name="user">
??<field-validator type="required" short-circuit="true">
??????????? <message>用户的信息必填</message><!-- 消息前缀 -->
??</field-validator>
??<field-validator type="visitor"><!-- 指定为visitor校验规则 -->
???<param name="context">userContext</param><!-- 指定本visitor校验的上下文名 -->
??????????? <param name="appendPrefix">true</param><!-- 是否要添加校验失败消息的前缀 -->
??????????? <message>用户的</message><!-- 消息前缀 -->
??</field-validator>
?</field>
??? ii) 针对visitor的Field编写一个校验规则文件.文件名为: visitor字段类型名[-visitor校验的上下文名]-validation.xml. 例如: 本例中的文件名为User-userContext-validation.xml
????????????????? 注意: 此文件要存放到visitor字段类型所在的包下.
??? iii) 在visitor的Field校验规则文件中针对要校验的Field添加校验规则.
?? 3) 在校验失败页面(名为input的result页面)中,可以使用<s:fielderror/>来显示错误消息。
?? 4) 默认情况下,XML的校验规则对Action中所有的请求处理方法生效.此时应该只针对每个要校验的请求处理方法指定校验。有两种方式:
????? i) 只为Action中的指定方法指定校验规则文件,配置文件命名为:Action类型名-别名-validation.xml,
????????????????????? 别名是要校验的方法对应的Action标签的name属性值。
????????????????????? 如:UserAction在struts2.xml的配置为:
??? <package name="my" extends="struts-default" namespace="/">
??<action name="user_*" method="{1}">
???<result name="success">/info.jsp</result>
???<result name="input">/user_{1}.jsp</result>
??</action>
??? </package>?????????????
??????????????? ● UserAction中有registe方法和login方法,要对registe方法进行校验,则它的校验规则文件名为:UserAction-user_registe-validation.xml。
???????????????? ● 如果使用visitor校验器,必需指定visitor校验的上下文名。
????? ii) 在校验拦截器中指定要验证的方法。不太实用。
?? <action name="user_*" method="{1}">
??? <result name="success">/info.jsp</result>
??? <result name="input">/user_{1}.jsp</result>
???? <interceptor-ref name="defaultStack">
??????? <!-- 给校验拦截器指定不进行校验的方法列表:用逗号隔开 -->
??????? <param name="validation.excludeMethods">*</param>
??????? <!-- 给校验拦截器指定要进行校验的方法列表:用逗号隔开 -->
??????? <param name="validation.includeMethods">regist</param>
????? </interceptor-ref>
?? </action>
?? 5) 同时使用客户端校验和服务器端校验
????? i) 设置<s:form>标签的validate属性:
???????? false:默认值。校验框架只执行服务器端校验。
???????? true:先执行客户端校验,然后再执行服务器端校验。
???????? form标签会根据你在服务器端配置的验证规则生成对应的JavaScript验证代码。
????????????????????? 目前支持的内置校验器:required、requiredstring、stringlength、regex validator、email、url、int、double
????? ii) 不太好用,不建议使用。建议使用jQuery进行页面表单校验。
?? 6) 自定义校验器:
????? i) 继承自FieldValidatorSupport抽象类。重写validate(Object obj)方法
????? ii) 注册校验器类. 在应用程序的classpath下新建一校验器注册文件。名为validators.xml,内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC
??????? "-//OpenSymphony Group//XWork Validator Config 1.0//EN"
??????? "http://www.opensymphony.com/xwork/xwork-validator-config-1.0.dtd">
<validators>
? <validator name="校验器名" alt="Struts2复习(8)-表单验证的两种方式">
?
?
第一个示例:XML配置式校验器---注册页面
acc_registe.jsp
?src/struts.xml
?
AccountAction.java
?
?
第二个示例:XML配置式校验器---登录和注册页面
user_login.jsp
?
user_registe.jsp?
src/struts.xml
?
UserAction.java
?
UserAction-user_registe-validation.xml
?
?
第三个示例:注解方式校验器---注册页面
acc2_registe.jsp
?
src/struts.xml
?
Account2Action.java
?src/struts.xml
?
User2Action.java
?
与User.java同一目录下的User-userLoginContext-validation.xml
?
?
感谢,最近正好用到