在每次JSF ajax回发后执行JavaScript



我有一个javascript函数,我想在JSF 2中的每次异步回发后执行。

我做了以下操作来确保每次整页回发都执行:

jQuery(document).ready(mahFunction);

我需要这样做的原因是为了解决第三方JSF组件库中的一个小故障,因此我无法在服务器呈现阶段修改任何内容来为组件执行此操作。

我很难找到这方面的信息,可能是因为我使用了不正确的术语。我以前是ASP。NET开发人员和我将这些术语称为"完整页面回发"one_answers"部分回发",而其他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事件数据负载

<>之前的名字 描述/值------------- ----------------------------------------------------类型 " 事件"status表14-3中指定的事件之一source触发Ajax请求的DOM元素。Ajax请求对象'状态' (XMLHttpRequest.status);"begin"事件不存在;XMLHttpRequest.responseXML);"begin"事件不存在;responseText文本响应(xmlhttpresponse . responseText);"begin"事件不存在;之前

作为一种替代方法,一种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();" />

请参考您正在使用的组件库的文档。

参见:

  • 如何重新执行javascript函数后的形式渲染?

相关内容

  • 没有找到相关文章

最新更新