簡體   English   中英

每次JSF ajax回發后執行JavaScript

[英]Execute JavaScript after every JSF ajax postback

我有一個javascript函數,我希望在JSF 2中的每個異步回發后執行。

我已完成以下操作以確保執行每個完整頁面的回發:

jQuery(document).ready(mahFunction);

我需要這樣做的原因是解決第三方JSF組件庫中的故障,因此我無法修改服務器呈現階段中的任何內容來為組件執行此操作。

我很難找到有關這方面的信息,因為我使用了錯誤的條款。 我曾經是一名ASP.NET開發人員,我將這些術語稱為“整頁回發”和“部分回發”,似乎其他JSF開發人員不使用這些術語。

您可以通過jsf.ajax.addOnEvent將其注冊為JSF ajax回調處理程序:

<script>
    jsf.ajax.addOnEvent(foo);
</script>

<script>
    function foo(data) {
        var ajaxStatus = data.status; // Can be "begin", "complete" and "success".

        switch (ajaxStatus) {
            case "begin": // Right before sending ajax request.
                // ...
                break;

            case "complete": // Right after receiving ajax response.
                // ...
                break;

            case "success": // When ajax response is successfully processed.
                // ...
                break;
        }
    }
</script>

其中data對象具有幾個有用的XHR派生屬性,如JSF 2.0規范的表14-4中所述(單擊For Evaluation鏈接)。 這是相關的摘錄:

表14-4事件數據有效負載

\n     名稱描述/價值\n     ------------- ------------------------------------- ---------------\n     輸入“事件”\n     status表14-3中指定的事件之一\n     source觸發Ajax請求的DOM元素。\n     responseCode Ajax請求對象'status'(XMLHttpRequest.status); \n                    不屬於“開始”事件;\n     responseXML XML響應(XMLHttpRequest.responseXML); \n                    不屬於“開始”事件;\n     responseText文本響應(XMLHttpResponse.responseTxt);\n                    不屬於“開始”事件;\n

作為替代方案,XHTML聲明方式是將腳本調用嵌入到具有id的JSF組件中,並讓ajax調用重新呈現它。 該組件應該依次基於FacesContext#isPostback()有條件地呈現腳本。

<h:form>
    <h:commandButton value="Submit" action="#{bean.submit}">
        <f:ajax render=":myscript">
    </h:commandButton>
</h:form>

<h:panelGroup id="myscript">
    <h:outputScript rendered="#{facesContext.postback}">foo();</h:outputScript>
</h:panelGroup>

然而,大多數組件庫都有更好的抽象支持。 既然你沒有提到你正在使用哪一個,那么可以給出更合適的答案,這里只是一個基於PrimeFaces命令按鈕的隨機例子。

<p:commandButton value="Submit" action="#{bean.submit}" oncomplete="foo();" />

請參閱您正在使用的組件庫的文檔。

也可以看看:

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM