Struts2默认验证器、自定义验证器

一。struts2验证器的工作流程:

Struts2默认验证器、自定义验证器_第1张图片

有关struts给我们提供的默认验证器可参考:http://blog.csdn.net/yongjian1092/article/details/7349606

二。用一个例子说明验证器的使用方法:

程序包图:

Struts2默认验证器、自定义验证器_第2张图片

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);添加错误信息。运行下你就可以看到控制台打印出来的结果。


以上问题若有不明白的地方,请联系。


你可能感兴趣的:(struts2)