3

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

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

这是我的表格。

<!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>

注册验证.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>

还有我validateRegisterAction班级。

public void validate(){

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

        }

    }

我在做什么的情景。

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

4

2 回答 2

1

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

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

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

于 2013-02-23T12:38:17.833 回答
-1

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

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

  • 检查您是否有 userbean 的 getter 和 setter
  • validate() 方法处的断点以检查那里的 userbean 的内容
于 2012-12-20T12:16:50.193 回答