对于struts2的验证机制的(FieldError)一些理解

以前一直是用struts1开发程序,近日看了一下struts2。在这里发表一下自己的一下看法,欢迎大家探讨一下。

 

struts2 采用配置文件的形式进行验证的,action的代码如下:

public class LoginAction extends com.opensymphony.xwork2.ActionSupport{
   
    private String userName;
    private String passwd;
    private String vercode;
 
    public String login()throws Exception
    {
       
       
            return "";
    }
}

 

 

验证文件的名称是:LoginAction-login-validation.xml

 

<?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="userName" >
        <field-validator type="requiredstring" >
            <message>login用户名必填!</message>
        </field-validator>
        <field-validator type="regex" >
            <param name="expression"><![CDATA[(\S{2,10})]]></param>
            <message>您输入的用户名的长度必须在2到10之间</message>
        </field-validator>
    </field>
    <field name="passwd" >
        <field-validator type="requiredstring" >
            <message>login密码必填!</message>
        </field-validator>
    </field>
    <field name="vercode">
        <field-validator type="requiredstring">
            <message>login验证码必填!</message>
        </field-validator>
        <field-validator type="regex">
            <param name="expression"><![CDATA[(\w{6,6})]]></param>
            <message>您输入的验证码只能是字母和数字,且长度必须在6位</message>
        </field-validator>
    </field>
</validators>

 

在页面提交一个form表单:

 <form   action="login.action" method="post" >

<table>
            <tr>
    <td><label>用户名:</label></td>
    <td
><input type="text" name="userName " value=""/>
</td>
<td>
<s:fielderror ><s:param>userName </s:param></s:fielderror>
</td>
</tr>

            <tr>
    <td><label>密码:</label></td>
    <td
><input type="password" name="passwd " />

</td>
<td>
<s:fielderror><s:param>passwd </s:param></s:fielderror>
</td>
</tr>

            <tr>
    <td><label>验证码:</label></td>
    <td
><input type="text" name="vercode " value="" />
</td>
<td>
<img src="authImg" id="authImg" onClick="refresh()" title="看不清?单击此处刷新" alt="验证码"/>
<s:fielderror><s:param>vercode </s:param></s:fielderror>
</td>
</tr>

            <tr>
    <td colspan="2"><div align="right"><input type="submit" value="登陆"/>

</div></td>
</tr>
   
        </table></form>

 

当你输入的字段不符合配置文件的规则,就会跳到配置的input页面里面。例如输入的用户名不符合规则,则会显示提示的信息在:<s:fielderror ><s:param>userName </s:param></s:fielderror>里面。

有一个问题是:当你再次根据提示的信息,修改你的输入信息。还是不能提交,这是为什么呢?

原因是因为里面的fielderror的字段的信息没有清空。

有时但你需要从action里面读取一下数据,在页面显示的时候,如果你的输入信息错误,那你将读取不到action里面的信息,这是因为当验证没有通过的时候是读取不到action的东西,那当跳转到input的时候,就会有些数据读取不到了。

解决的办法是重写validate()方法。

 

你可以在该方法里面的开头加一句:clearErrorsAndMessages(); 这样每次从新验证的时候就会把上次的错误信息清除掉。

而且重写该方法可以把你需要的数据在这里写好。

 

上面是我的一下看法,如果有更好的解决办法,请告诉我,谢谢

你可能感兴趣的:(xml)