仅在表单有效时关闭弹出窗口

时间:2016-05-06 21:54:14

标签: javascript html jsf richfaces richfaces-modal

我想验证我的inputText字段,该字段位于popupPanel中。它应该只包含数字。

<h:form>
    <h:outputText value="Input:"/>
        <h:inputText id="myID" value="#{myBean.field}"
            validatorMessage="Only numbers">
            <f:validateRegex pattern="([0-9])*$" />
            <rich:validator />
            <a4j:ajax event="change" render="msgValidator" />
        </h:inputText>
        <h:message id="msgValidator" for="myID" styleClass="text_colorRed" />
</h:form>

毕竟我想用按钮保存所有内容。如果输入正确,我想关闭弹出窗口,否则我想重新插入正确的输入而不关闭弹出窗口。

<a4j:ajaxButton type="submit" value="Save" styleClass="text_weigthBold"
    action="#{myBean.save()}" render="myTable"
    oncomplete="#{rich:component('myPopup')}.hide();" execute="@this">
</a4j:ajaxButton>

不幸的是,当我输入错误的输入并在按钮上单击两次时,它会保存请求并关闭弹出窗口而不请求输入正确的文本。

我还使用了Java验证器,但行为仍然相同。

我该怎么做才能纠正这个错误?

2 个答案:

答案 0 :(得分:0)

这是因为你无条件关闭弹出窗口。如果验证正常,您必须检查自己。在JSF 2.0中,您可以使用FacesContext#isValidationFailed()

<a4j:commandButton execute="@form" value="Save" styleClass="text_weigthBold" 
    oncomplete="if (!#{facesContext.validationFailed}) {#{rich:component('myPopup')}.hide();}"
    action="#{myBean.save}" render="myTable" />

要检查其他错误,您可以使用facesContext.maximumSeverity.ordinal gt 0facesContext.maximumSeverity != null

我不知道RF 3.X(并且您没有告诉您是否使用RF 3或4)但看起来它从未有过名为a4j:ajaxButton的组件,您的意思是{{1 }}?另请注意,我已将a4j:commandButton更改为action="#{myBean.save()}",这是正确的。

答案 1 :(得分:0)

解决。在表单中有一些h:复选框,我删除了复选框,现在它工作正常。我不知道为什么Richfaces复选框无法正常工作,但我用HTML复选框替换它们。