1,通过配置文件来校验数据
此配置文件名格式为(ActionName-validation.xml),此文件应该放在与Action相同包下
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE validators PUBLIC
"-//Apache Struts//XWork Validator 1.0.3//EN"
"http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd">
<validators>
<field name="name">
<!-- short-circuit="true" 为短路校验 防止因为一项 校验没过而输出多条校验失败提示信息 -->
<field-validator type="requiredstring" short-circuit="true">
<param name="trim">true</param>
<message>此项必填</message>
</field-validator>
</field>
<field name="password">
<field-validator type="requiredstring" short-circuit="true">
<param name="trim">true</param>
<!-- 此处通过key 可以从国际化资源中获取信息(如下为国际化资源) -->
<message key="pass.tip" />
</field-validator>
</field>
</validators>
############################################################
#国际化资源文件(src/in_zh_CN.properties)
pass.tip=请务必写上密码
Action类需要继承AcitonSupport类(否则校验器将不起作用)
public class Validation extends ActionSupport{
private String name;
private String password;
public String execute(){
System.out.println("Vali");
return Action.SUCCESS;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
当校验不能通过时将返回result 为input结果 。配置struts.xml文件
<action name="validation" class="com.wang.validation.Validation">
<result name="input">/validation/v.jsp</result>
<result>/validation/success.jsp</result>
</action>
*.jsp
<s:form action="validation" method="post">
<s:textfield name="name" key="user"/>
<s:textfield name="password" key="password"/>
<s:submit value="提交"/>
</s:form>
<!-- 可以通过<s:fielderror /> 打印校验错误信息 此处为表单struts2 会自动打印错误信息
此处的key是重国际化资源中来找信息
-->
<s:form action="validation" method="post">
<s:textfield name="name" key="user"/>
<s:textfield name="password" key="password"/>
<s:submit value="提交"/>
</s:form>
以上为服务器端进行数据校验,也可以在客服端(游览器)通过js进行数据校验(需要将客服端表单<s:form .... 中加入 validate="true")
因为action可能含有多个处理逻辑(多个类似execute方法),因此要具体到每个处理逻辑进行校验上面方法显然完不成。(上面是通过具体action类进行处理)因此可以通过改变配置文件名格式来配置到具体方法 ActionName-(配置action的name)-validation.xml
配置文件struts.xml
<action name="validation1" class="com.wang.validation.Validation" method="method1">
<result name="input">/validation/v1.jsp</result>
<result>/validation/success.jsp</result>
</action>
<action name="validation2" class="com.wang.validation.Validation" method="method2">
<result name="input">/validation/v2.jsp</result>
<result>/validation/success.jsp</result>
</action>
Validation-validation1-validation.xml文件(放在与action相同路径下)
<validators>
<field name="name">
<field-validator type="requiredstring">
<param name="trim">true</param>
<message>此项必填---v1</message>
</field-validator>
</field>
<field name="password">
<field-validator type="requiredstring">
<param name="trim">true</param>
<message key="pass.tip"/>
</field-validator>
</field>
</validators>
Validation-validation2-validation.xml文件(放在与action相同路径下)
<validators>
<field name="name">
<field-validator type="requiredstring">
<param name="trim">true</param>
<message>此项必填---v2</message>
</field-validator>
</field>
<field name="password">
<field-validator type="requiredstring">
<param name="trim">true</param>
<message key="pass.tip"/>
</field-validator>
</field>
</validators>
当直接访问其中一个Action(如 localhost:8080/s2p/validation/validation1.action)且校验未通过将会出现如下情况
因为开始为单个Action配置校验文件(ActionName-validation.xml)时与此校验文件进行了叠加出现多条提示信息
各个校验器类型
1,必填校验器 required(该项必须有值非空)
<validators>
<!-- 此处的 name 为Action 中的name属性 -->
<field name="name">
<field-validator type="required">
<message>此项必填</message>
</field-validator>
</field>
</validators>
2,必填字符串校验器 requiredstring(非空也不可以是"")
<validators>
<!-- 此处的 name 为Action 中的name属性 -->
<field name="name">
<field-validator type="requiredstring">
<message>此项必填</message>
</field-validator>
</field>
</validators>
3,整数校验int long short.(可以指定最大值最小值) 【与整数校验几乎相同的还有浮点校验要求校验数据为双浮点】
<validators>
<!-- 此处的 name 为Action 中的num属性 -->
<field name="num">
<field-validator type="int">
<param name="min">0</param>
<param name="max">100</param>
<message>所填范围必须在0~100之间</message>
</field-validator>
</field>
</validators>
4,日期校验(可以指定最大值最小值))[未指定日期格式系统将使用默认格式如下]
<validators>
<!-- 此处的 name 为Action 中的date属性 -->
<field name="date">
<field-validator type="date">
<param name="min">1990-01-01</param>
<param name="max">2000-01-03</param>
<message>所填范围必须在1990-01-01~2000-01-03之间</message>
</field-validator>
</field>
</validators>
5,字段表达式校验器
<validators>
<!-- 此处的 name 为Action 中的date属性 -->
<field name="date">
<field-validator type="fieldexpression">
<!-- 此表达式返回一个布尔值 只有档期返回true时校验通过 -->
<param name="expression>(表达式可以是OGNL表达式)</param>
<message>未通过校验</message>
</field-validator>
</field>
</validators>
6,邮件地址和网址校验器
<validators>
<!-- 此处的 name 为Action 中的email属性 -->
<field name="email">
<field-validator type="email">
<message>请填写一个有效的邮箱地址</message>
</field-validator>
</field>
</validators>
<validators>
<!-- 此处的 name 为Action 中的url属性 -->
<field name="url">
<field-validator type="url">
<message>请填写一个有效的网路地址</message>
</field-validator>
</field>
</validators>
7,Visitor校验器(复合类型校验)
<validators>
<!-- 该user为一复合类型 里面包含name password等属性 -->
<field name="user">
<field-validator type="visitor">
<!-- 指定校验规则文件 context -->
<param name="context">userContext</param>
<!-- 指定校验失败后提示信息是加下面的前缀 -->
<param name="appendPrefix">true</param>
<!-- 对应前缀 -->
<message>用户的:</message>
</field-validator>
</field>
</validators>
以上校验文件并未指定User校验规则 还需为其创建校验规则文件(放在User相同路径下)[校验文件名应该为User-validation.xml 但上面校验文件指定了context 为 userContext 所以 名字为 User-userContext-validation.xml]
8,转换校验器(检验被校验字段校验时是否出现类型转化的错误)
<validators>
<field name="age">
<field-validator type="conversion">
<!-- 类型转化错误后表单域是否保存原来输入的错误 -->
<param name="repopulateField">true</param>
<message>你所输入的必须为一个整数</message>
</field-validator>
</field>
</validators>
9,字符长度校验
<validators>
<field name="str">
<field-validator type="stringlength">
<param name="minLength">4</param>
<param name="maxLength">20</param>
<message>你所输入的字符范围为4~20</message>
</field-validator>
</field>
</validators>
10,正则表达式校验器
<validators>
<field name="str">
<field-validator type="regix">
<param name="regix">(输入正则表达式)</param>
<!-- 正则表达式是否区分大小写 -->
<param name="caseSensitive">true</param>
<message>......请输入正确格式</message>
</field-validator>
</field>
</validators>
还可以通过在Action中加入对应注解方式来实现数据校验(参考书籍)
2,通过在Action中写相应的校验方法实现手动校验(对应Action 需要继承 ActionSupport)
//对所有方法都起校验作用
public void validate(){
System.out.println("数据校验");
//该方法是校验失败信息加入到FieldError中(如向获取国际化文件资源可以通过getText()方法)
addFieldError("user","数据校验失败");
}
//通过声明validateXxxx()方法校验对应方法的校验
public void validateMethod1(){
System.out.println("方法method1方法校验失败");
addFieldError("user","方法method1方法校验失败");
}