2012-12-20 32 views
3

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

现在我的问题。当我提交表单并且我没有填写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> 

而且我validateRegisterAction类。

public void validate(){ 

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

     } 

    } 

情景我在做什么。

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

+0

所以你说xml验证不起作用? –

+0

是的,它不起作用 – KyelJmD

回答

1

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

您第二次拨打有效调用,所以验证后execute方法应返回结果。并且这个结果应该是在目标页面"result"处替换的JSP片段,即表单元素。但div "divErrors"不会被您的代码取代。如果它在第一个请求中出现错误,那么它会在那里。

好的,我认为它足以让人理解ajax和验证。并且您现在了解如何解决返回不是预期结果的问题。

+0

感谢罗马C,我在问​​这个问题后意识到了这一点。但无论如何感谢您的意见。这是去年12月20日。哈哈 – KyelJmD

+0

我不能回答那个时间:(如果你喜欢它,你也可以接受它:)在我之前的答案看起来很奇怪:) –

+0

@ pathfinder2104如果你有问题,你应该通过[问问题]发布它( http://stackoverflow.com/questions/ask)。 –

-1

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

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

  • 检查,如果你有的UserBean
  • 断点getter和setter的validate()方法来检查的的UserBean有
+0

我有setter和getter的userBean,显然userBean正在初始化。它正在返回一个值。 – KyelJmD

+0

那么在validate()断点中会发生什么?你在if语句里面吗? – mmalmeida

+0

另外,为什么在validate()中同时具有XML验证和相同的规则? – mmalmeida