Struts2的validate方法及验证框架

一、使用Action的validate()方法进行验证

使用了struts2框架后,可以在Action类中添加public void validate()方法对数据进行验证,如下所示:

public class TestAction extends ActionSupport{

private String name;
//setter && getter methods....

public String save() throws Exception {  
        if(hasFieldErrors()){  
            return INPUT;  
        }  
        return SUCCESS;  
    }
public void validate() {
   if (!name.trim().equals("sunny"))
    this.addFieldError("msg.name", "请输入正确的用户名.");   
}
}

输入页面form.jsp的主要内容:

<body>
<s:fielderror key="msg.name"/>
    <s:form action="test!save" name="test">
    <s:textfield name="name"></s:textfield>
    <s:submit></s:submit>
    </s:form>
</body>

struts.xml的相关配置:

    <action name="test" class="zz.TestAction">  
            <result name="input">form.jsp</result>
            <result name="success">test.jsp</result>  
        </action>  
       <action name="saveMd" class="zz.TestAction" method="save">  
            <result name="input">formMethod.jsp</result>  
            <result name="success">test.jsp</result>  
        </action>

此时,当在form.jsp中输入的内容未通过验证时(即输入的不是sunny),则会在form.jsp中显示提示信息。

二、使用struts2的验证框架

若使用validation框架,则不需要在Action中编写validate方法。

可以为一个Action编写一个验证配置文件,这里的 Action类名为TestAction,则配置文件名为TestAction-validation.xml,即类名-validation.xml的格式,或者为一个Action类中的方法编写一个配置文件,该配置文件的命名格式为类名-Action名-validation.xml,例如为上面的save方法编写一个验证文件,则该文件名为TestAction-saveMd-validation.xml(参考struts.xml文件中的saveMd的配置),这个配置文件的格式如下:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.2//EN"
"http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">
<validators>
    <field name="name">
        <field-validator type="requiredstring">
            <message>请输入姓名</message>
        </field-validator>
     </field>
</validators>

不需在页面中提供显示错误信息的标签,可以直接显示,测试文件的主要内容:

   <s:form action="save" name="test">  
        <s:textfield name="name" />
        <s:submit />  
    </s:form>

若同时提供了TestAction-validation.xml和TestAction-saveMd-validation.xml配置,将首先使用前一个文件进行检测,然后再根据后一个文件进行检测,可以从页面上显示的结果中看出这点。

猜你喜欢

转载自callmegod.iteye.com/blog/1469283