2012-07-03 55 views
0

我需要檢查呈現的rich:messages組件是否有來自JavaScript的任何消息附加到它。如何檢查RichFaces組件rich:messages是否在Javascript中有消息?

我在執行AJAX調用後通過a4j:jsFunction重新渲染了rich:messages組件,並且如果它附帶任何消息(這將意味着驗證未通過),我想檢查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 docs以查看是否有方法檢查它是否附加了任何消息,但它沒有Javascript API。

有沒有人有更好的主意?

回答

1

我在this question上發現了一個hacky解決方案。

我用a4j:commandButton替換a4j:jsFunction,它只用於執行驗證的目的。

然後在此a4j:commandButtononcomplete,我把來檢查,如果驗證通過,然後「點擊」另一個無形h:commandButton提交表單真正的一個JS,稱真正的行動。

因此,它是這樣的:

<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> 
相關問題