struts2如何运行其validate方法?

时间:2012-12-20 05:21:54

标签: java ajax validation struts2 xml-validation

我正在使用validate()方法进行XML表单验证和表单验证。 XML验证是检查它们是否填写了必填字段,字段是否具有适当的长度等,而如果输入的值存在于数据库中,则验证方法会执行数据库查找。如果确实存在,则会添加字段错误。

现在我的问题。当我提交表单并且我没有填写requiredstrings时,它会向页面添加错误,但是当我输入有效值时,它仍会提示相同的错误(同时它不会调用验证法)。

这是我的表格。

<!DOCTYPE HTML>
<%@ taglib prefix="s" uri="/struts-tags"%>
<%@ taglib prefix="sj" uri="/struts-jquery-tags"%>
<html>
<head>

<sj:head/>  
</head>
<body>
    <h3>Register for a prize by completing this form.</h3>
    <div id="divErrors">
    </div>

    <s:form action="register" id ="result">
            <label>UserName</label>
            <s:textfield name="userBean.username" />
            <s:fielderror/>
        <sj:submit 
                    targets="result" 
                    value="AJAX Submit" 
                    indicator="indicator"
                    button="true"
                    />

    </s:form>
</body>
</html>

注册-validation.xml中

<!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="userBean.username">
        <field-validator type="requiredstring">
            <message>User name is required.</message>
        </field-validator>
    </field>
</validators>

来自validate班级的RegisterAction

public void validate(){

        if(userBean != null && userBean.getUsername().equals("foo")){
            this.addFieldError("userBean.username", "That Username already exist");

        }

    }

情景我在做什么。

我将在不填写所需字符串的情况下提交表单,然后我将输入一个有效值,在提交表单后仍然存在相同的错误。

2 个答案:

答案 0 :(得分:1)

实际上问题是,如果验证失败,默认情况下Struts2中的验证框架会返回input结果。如果input是内部表单的JSP页面,那么当您进行ajax调用时,整个页面将被替换。

第二次进行有效调用,因此在验证后execute方法应该返回结果。这个结果应该是在目标"result"的页面上替换的JSP片段,即表单元素。但div "divErrors"并未被您的代码替换。如果它在第一个请求上呈现错误,那么它就会在那里。

好的,我认为理解ajax和验证是值得的。而且您现在了解如何解决返回不期望结果的问题。

答案 1 :(得分:-1)

很多事情都可能发生。例如,“userbean”可能没有初始化。

您还使用了两个验证:XML中的验证,如果您已配置Validator拦截器(请参阅http://struts.apache.org/2.2.3/docs/interceptors.html)和validate()方法,则应该可以使用。

  • 检查您是否拥有userbean
  • 的getter和setter
  • 在validate()方法中断点以检查userbean的内容