1

我需要检查渲染的rich:messages组件是否附加了来自 JavaScript 的任何消息。

在执行 AJAX 调用后,我正在rich:messages通过 a 重新呈现组件a4j:jsFunction,并且我想检查 Javascript 是否附加了任何消息(这意味着验证未通过)。

a4j:jsFunction 的代码如下所示:

<a4j:jsFunction name="validateSomething" render="erroFinaliza"
        execute="@form" action="#{someMB.preview}">
</a4j:jsFunction>

现在,我这样称呼它h:commandButton

<h:commandButton onclick="validateSomething(); return false;" value="Do Something" />

我需要一种通过 JavaScript 检查验证结果的方法,然后真正提交表单。

我检查了rich:messages 文档,看看是否有办法检查它是否附加了任何消息,但它没有 Javascript API。

有没有人有更好的主意?

4

1 回答 1

2

我在这个问题上找到了一个 hacky 解决方案。

我将 替换为a4j:jsFunctiona4j:commandButton用于执行验证的目的。

然后在此oncomplete之上a4j:commandButton,我放置了一个 JS 来检查验证是否通过,然后“单击”另一个h:commandButton提交真实表单的不可见的,调用实际操作。

所以,它是这样的:

<h:form id="id_form">
    <rich:messages id="errors" />

    ...

    <script>
    function submitIfEmpty(noMessages){
        if (noMessages){
            document.getElementById('id_form:hiddenButton').click();
        }
    };
    </script>

    ...

    <a4j:commandButton value="Do Something" render="errors" execute="@form"
         oncomplete="submitIfEmpty(#{empty facesContext.maximumSeverity});" />
    <h:commandButton id="hiddenButton" action="#{someMB.doSomething}"
         value="Do Something (not visible)" style="visibility: hidden" />
</h:form>
于 2012-07-03T19:38:39.180 回答