Struts2默认验证器、自定义验证器
一。struts2验证器的工作流程:
有关struts给我们提供的默认验证器可参考:http://blog.****.net/yongjian1092/article/details/7349606
二。用一个例子说明验证器的使用方法:
程序包图:
1.hello.jsp:程序入口
<body>
<s:form action="helloa" method="post">
<s:textfield name="obj.user" label="姓名"></s:textfield>
<s:password name="obj.password" label="密码"></s:password>
<s:submit value="提交"></s:submit>
</s:form>
</body>
这里需要注意的是,我用一个obj实例来封装了User类里面的user和password属性,所以表单里要用obj.user来取值。
2.TestAction-invalidation.xml(起名方式是Class类名-invalidation.xml)
<!DOCTYPE validators PUBLIC
"-//OpenSymphony Group//XWork Validator 1.0.3//EN"
"http://www.opensymphony.com/xwork/xwork-validator-1.0.3.dtd">
<validators>
<field name="obj.user">
<field-validator type="requiredstring">
<param name="trim">true</param>
<message>必须输入用户名</message>
</field-validator>
</field>
<field name="obj.password">
<field-validator type="requiredstring">
<param name="min">6</param>
<param name="min">10</param>
<message>必须在长度是6~10之间</message>
</field-validator>
</field>
</validators>
该文件必须和TestAction放在同一个目录下面,要万分注意!如有不明白请看上图。2.创建struts.xml
<constant name="struts.devMode" value="true" />
<package name="default" namespace="/" extends="struts-default">
<action name="helloa" class="Action.TestAction">
<result>/success.jsp</result>
<result name="input">/Hello.jsp</result> <!--输入如果错误,Action会返回一个input给Struts.xml,他的意思是你还需要返回“输入”这个状态,此时验证器里面配置的提示信息就会出现!-->
</action>
</package>
1)表单提交属性的时候由helloa这个Action来完成动作跳转,执行后返回SUCCESS字符串。这是正常情况
2)如果需输入错误,我们的验证器就起作用了
三。在struts2框架下,自定义验证器很容易。
1. 先创建一个类,用来写自定义的验证方法。下面是我写的MyValidate类
public class MyValidate extends FieldValidatorSupport{
public void validate(Object obj) throws ValidationException {
// TODO Auto-generated method stub
String name = super.getFieldName();
String value = super.getFieldValue(name, obj).toString();
System.out.println(name);System.out.println(value);
super.addFieldError(super.getFieldName(), obj);
}
}
它继承FieldValidatorSupport类,重写validate()方法,验证规则就写在validate()方法里面。解释下里面关键的几点。super.getFieldName();获取xml验证中的需要验证的字段名。super.getFieldValue(name, obj).toString();获取表单提交的该字段的值。super.addFieldError(super.getFieldName(), obj);添加错误信息。运行下你就可以看到控制台打印出来的结果。
以上问题若有不明白的地方,请联系。