【问题标题】:jsf.ajax.addOnEvent works only if I explicitly include javax.faces:jsf.jsjsf.ajax.addOnEvent 仅在我明确包含 javax.faces:jsf.js 时才有效
【发布时间】:2015-07-02 07:40:39
【问题描述】:

我正在使用 JSF 2.2.4,head 标签中包含以下内容:

<h:outputScript library="javax.faces" name="jsf.js" />

后来我发现以下帖子并删除了上面的代码,因为它将自动包含在内: renaming jsf.js.jsf to jsf.js.xhtml

当我检查时发现它是自动包含的,但是我们在放置在通用模板头部的脚本时遇到了错误。错误是脚本将 object jsf 获取为 undefined。此脚本的目的是为所有 JSF AJAX 调用显示一个通用加载器。脚本如下:

//To display loading indicator for all JSF f:ajax calls.
jsf.ajax.addOnEvent(function(data) {
  var ajaxstatus = data.status; // Can be "begin", "complete" and "success"
  switch (ajaxstatus) {
    case "begin": // This is called right before ajax request is been sent.
      wizShowAjaxLoader();
      break;
    case "complete": // This is called right after ajax response is received.
      wizHideAjaxLoader();
      break;
    case "success": // This is called when ajax response is successfully processed.
      // NOOP.
      break;
  }
});

我想知道为什么当我明确包含 jsf.js 时它会起作用。当我删除它时,脚本将 jsf 对象显示为未定义。

【问题讨论】:

    标签: javascript jsf jsf-2.2


    【解决方案1】:

    您需要确保在 包含 javax.faces:jsf.js 之后调用您的脚本,原因很简单,即 jsf 仅在 javax.faces:jsf.js 被包含时才在 JavaScript 范围内定义包括(并执行)。

    简而言之,您需要确保 JavaScript 代码流程如下所示:

    var jsf = ...;
    ...
    jsf.ajax.addOnEvent(...);
    

    因此不是这样的:

    jsf.ajax.addOnEvent(...);
    ...
    var jsf = ...;
    

    确保这一点的一种方法是将您的脚本作为&lt;h:outputScript&gt; 包含在&lt;h:body&gt; 中,并将target 设置为head

    <h:head>
        ...
    </h:head>
    <h:body>
        <h:outputScript name="yourscript.js" target="head" />
        ...
    </h:body>
    

    JSF 将确保它在 HTML 头 自动包含的脚本之后结束。

    另一种方法是将其保留在&lt;h:head&gt; 中,但将target 设置为body

    <h:head>
        ...
        <h:outputScript name="yourscript.js" target="body" />
    </h:head>
    

    JSF 将确保它在 HTML 正文的最后结束,因此它基本上在 DOM 加载事件之前执行。

    【讨论】:

    • 如果是这样,我想知道为什么当我将加载程序显示脚本从头部移动到身体底部时它没有显示任何错误。当我使用 firebug 检查时,页面加载时会调用 jsf.js。
    • 您没有在问题的任何地方说明这一点。我会更新答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-09-05
    • 2020-06-02
    • 1970-01-01
    • 1970-01-01
    • 2021-04-07
    • 1970-01-01
    • 2012-12-26
    相关资源
    最近更新 更多