当前位置: 首页 > 面试题库 >

每次JSF ajax回发后执行JavaScript

漆雕疏珂
2023-03-14
问题内容

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

我已执行以下操作以确保执行此每整页回发:

jQuery(document).ready(mahFunction);

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

我可能找不到有关此问题的信息,可能是因为我使用了不正确的术语。我曾经是ASP.NET开发人员,我将这些术语称为“整页回发”和“部分回发”,而其他JSF开发人员似乎不使用这些术语。


问题答案:

您可以通过以下方式将其注册为JSF
ajax回调处理程序jsf.ajax.addOnEvent

<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中进行了描述(单击“
评估” 链接)。这是相关的摘录:

表14-4 事件数据有效负载

    名称说明/值
    ------------- -----------------------------------------------------
    输入“事件”
    状态表14-3中指定的事件之一
    source触发Ajax请求的DOM元素。
    responseCode Ajax请求对象“状态”(XMLHttpRequest.status);
                   对于“开始”事件不存在;
    responseXML XML响应(XMLHttpRequest.responseXML);
                   对于“开始”事件不存在;
    responseText文本响应(XMLHttpResponse.responseTxt);
                   对于“开始”事件不存在;

作为一种替代方法,一种XHTML声明性的方法是将脚本调用仅嵌入到带有的JSF组件中,id然后让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();" />

请参阅所用组件库的文档。



 类似资料:
  • 我正在做一个项目,我们使用flyway来升级我们的DB模式。 我正在通过插件使用。 多谢

  • 问题内容: 我正在尝试对存储进行多次更改,但是直到所有更改完成后才进行渲染。我想用redux-thunk做到这一点。 这是我的动作创建者: 我像这样派遣我的异步动作创建者: 但是,这导致每次反应后都进行渲染。我是redux-thunk的新手,我从未使用过异步中间件,但我认为它可以在这里为我提供帮助。 问题答案: 有一些方法可以实现目标: 经典方式: 通常:动作描述 发生某事 的 事实 ,但没有指定

  • 问题内容: 我有一个ajax调用到一个php文件。我正在收到结果。现在,我正在研究是否有可能使ajax请求每1秒自动执行一次。我将结果发布到名为的输入字段中。如何每三秒钟执行一次ajax调用而不必调用该函数? 问题答案: 您可能要考虑的是服务器发送事件(SSE) 这是一种HTML5技术,JavaScript可以通过该技术“ 长期轮询 ”服务器端点(您的PHP文件)以查看是否发生了任何更改。长轮询基

  • 我需要在GUI(JavaXF)和oracle12c数据库中的JavaStoredProcedure中处理XML文件。 在GUI中,我想使用属性绑定。因此,我配置了来生成带有属性的源代码。 所以我现在拥有的是这样的: 接下来我要做的是在maven-compiler-plugin的不同执行中,将和这两个文件夹分别编译到不同的输出文件夹和。 但我无法为一次执行更改maven-compiler-plugi

  • null 有什么主意吗?我该怎么做?我知道我不能只使用Once Controller,因为每个请求也是由每个线程执行的。

  • 我无法一次将每组数据帧发送给执行器。 我在中有如下数据。 我想将每个分组的数据发送给executor,以便一次处理每个数据。 为此,我做了如下工作: 错误: 这将抛出一个NullPointerExcure,因为在Execator端找不到rowDf。使用Scala 2.11在Spark-sql中处理此问题的正确方法是什么? 第二部分:问题 当我做公司模型时。groupBy(“model_id”、“f