【问题标题】:Closing popup only if the form is valid仅在表单有效时关闭弹出窗口
【发布时间】:2016-09-02 02:14:10
【问题描述】:

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

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

【问题讨论】:

    标签: javascript html jsf richfaces richfaces-modal


    【解决方案1】:

    这是因为您正在无条件关闭弹出窗口。您必须检查自己是否验证正常。在 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}",这是正确的。

    【讨论】:

    • 我使用的是 Richfaces 4.2,是的,它是一个 a4j:commandButton。不幸的是,如果我使用 facesContext.validationFailed 行为不正确,因为当我输入正确的输入并保存时,弹出窗口不会关闭。它调用动作并且响应是正确的,但弹出窗口保持打开状态。我能做什么?
    • @travis_91 我更新了我的回答。您必须将执行更改为 @form 或您想要的任何其他内容(我在弹出窗口中使用 popupId 作为此类版本),因为您必须提交输入(因此您也可以传递输入 id)。
    • 我尝试使用@form 或弹出窗口的 ID 更改执行,但是当我单击按钮时,它不会执行我的 bean 的操作和方法。你知道为什么吗?
    • 看起来你不知道execute param 是做什么的。您只能提交一个字段(在您的示例中为myID)。您没有粘贴所有代码,所以只是猜测(我不知道按钮在哪里,弹出窗口在哪里等)。提交按钮应采用您要提交的形式。您不能使用放置在另一个表单中的按钮提交一个表单。
    • 还要注意条件应该是如果不是验证失败则关闭。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-12-21
      • 1970-01-01
      • 2012-01-26
      • 1970-01-01
      • 2023-02-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多