Struts2 - datepicker客户端验证两次返回相同的错误消息

时间:2012-09-20 07:10:43

标签: jquery validation struts2 datepicker

我使用带有datepicker的struts2表单:

<s:form action="%{#parameters.myAction}" namespace="/" method="post" name="myForm" enctype="multipart/form-data" focusElement="dealTitleId" validate="true">
...
<sj:datepicker name="dealDisplayEnd" required="true" key="dealDisplayEnd-label" displayFormat="dd-mm-yy" readonly="true" minDate="0"/>

请注意validate="true"选项启用客户端验证(我需要这样做以防止在发生错误时丢失有关文件上载的其他信息)。

然后还为它创建了XML:

<field name="dealDisplayEnd">
        <field-validator type="required">
             <message key="error.dealDisplayEnd.empty"/>
        </field-validator>
  </field>

一切正常,但错误重复两次:

Error is shown twice

查看网页源代码,我看到验证脚本生成了两次:

 // field name: dealDisplayEnd
        // validator name: required
        if (form.elements['dealDisplayEnd']) {
            field = form.elements['dealDisplayEnd'];
            var error = "Deal display end date must be provided!";
            if (field.value == "") {
                addError(field, error);
                errors = true;

            }
        }
        // field name: dealDisplayEnd
        // validator name: required
        if (form.elements['dealDisplayEnd']) {
            field = form.elements['dealDisplayEnd'];
            var error = "Deal display end date must be provided!";
            if (field.value == "") {
                addError(field, error);
                errors = true;

            }
        }

这是一个struts2错误吗?或者我做错了什么?是因为我正在使用datepicker和客户端验证吗?我正在使用struts2-core-2.3.4.jar和struts2-jquery-plugin-3.3.3.jar。 我有一个简单的方法来修补(我找不到生成它的地方)?

感谢。

1 个答案:

答案 0 :(得分:1)

是的,你是对的,它似乎是来自struts2-jquery-plugin的错误。这里有一些参考文献:

REFERENCE 1
REFERENCE 2

struts2-jquery-plugin的作者的建议:

In this case you should not set validate="true". Implement you own validation handling in an own onBeforeTopic. How it works can you see in the struts2 jquery sources.

我猜您使用的是<sj:submit/>,如果您不使用<s:submit/>属性,可以尝试使用targets,它可以解决您的问题。有更多方法可以解决这个问题,只需自己尝试,如果你无法完成,请告诉我们。