-1

我想验证我的 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 验证器,但行为仍然相同。

我能做些什么来纠正这个错误?

4

2 回答 2

0

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

于 2016-05-09T12:21:49.637 回答
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 还是 RF 4),但看起来它从未命名过组件a4j:ajaxButton,您是说a4j:commandButton吗?另请注意,我已更改action="#{myBean.save()}"为正确action="#{myBean.save}"的。

于 2016-05-07T08:51:30.353 回答