【问题标题】:How do I utilize the error and success facets in a p:ajaxStatus如何在 p:ajaxStatus 中利用错误和成功方面
【发布时间】:2018-04-25 09:33:11
【问题描述】:

我正在尝试在 JSF 页面上向我的用户提供有关 ajax 请求的反馈。我定义了一个 primefaces 轮询组件,它定期向服务器发送请求,并且。到目前为止,这工作正常。我想借助 primefaces ajaxStatus 组件让用户了解当前状态。我是这样定义的:

<p:ajaxStatus>
  <f:facet name="default"><h:outputText value="default"/></f:facet>
  <f:facet name="start"><h:outputText value="start"/></f:facet>
  <f:facet name="success"><h:outputText value="success"/></f:facet>
  <f:facet name="error"><h:outputText value="error"/></f:facet>
  <f:facet name="complete"><h:outputText value="complete"/></f:facet>
</p:ajaxStatus>

我面临的问题是成功和错误方面永远不可见,或者更准确地说,在足够长的时间内永远不可见以实际感知它们。

现在我验证了我定义的构面已转换为具有正确生成的 id 的 div,该 id 由前缀加上相应的构面名称组成。我调试了相应的primefaces javascript,发现它只是应用'display:none;'作为所有方面的内联样式,然后在发生 ajax 事件时再次从表示当前状态的方面中删除样式。

现在我不明白的部分是如何利用错误和成功方面。完成事件总是紧跟在成功和错误事件之后。通过调试,我验证了成功和错误事件实际上被触发了,并且它们的方面也变得可见。但是成功/错误事件和随后的完成事件之间的时间太短了,您根本无法感知成功和错误事件的出现,甚至不会像屏幕闪烁一样。

现在我的问题是:

  1. 关于如何使用错误和成功方面,我在概念上是否有什么不明白的地方?
  2. 有什么方法可以防止完整的刻面立即替换错误和成功的刻面?省略完整的刻面不会产生任何影响。完成 ajax 请求后,根本不会显示任何方面。
  3. 当成功和错误方面实际上从未可见时,它们有什么意义?

编辑:与此同时,问题已得到解决。这是 primefaces 中的一个错误,将在 6.3 版中修复。这是我创建的相应错误报告:https://github.com/primefaces/primefaces/issues/3625。 我还提供了一个解决问题的拉取请求:https://github.com/primefaces/primefaces/pull/3653。对于任何对解决方法感兴趣的人,您可以自己构建 primefaces 并对其应用以下更改:https://github.com/primefaces/primefaces/commit/33fa3e55239b5bd974fa88b0f5ce29d02a5c3557。这将解决问题。

感谢 @kukeltje 鼓励我在 primefaces bugtracker 上发布问题。

【问题讨论】:

    标签: jsf primefaces


    【解决方案1】:
    1. 没有。

    2. 组件的来源在https://github.com/primefaces/primefaces/blob/master/src/main/resources/META-INF/resources/primefaces/ajaxstatus/ajaxstatus.js。您可以覆盖其中的 bindtrigger 函数,以延迟在错误方面发生时隐藏错误方面。你甚至可以让它需要主动关闭..但是......(见下文)

    3. 没有。

    ...我从来没有使用过错误的声明方式。我总是只用开始......所以从来没有注意到这种行为。但话又说回来,该错误针对 javascript 请求的技术处理中的错误。不适用于处理由于 javascript ajax 调用而导致的服务器错误。想想例如当互联网连接消失时,您无法进行 ajax 调用。这类错误。

    一种解决方法是使用

    <p:ajaxStatus onstart="alert('Start')" oncomplete="alert('End') onerror="alert('Error')"/>
    

    如果我是对的,您可以在其中访问this,其中包含有关错误的信息。

    但至少在问题列表中发布一个关于成功和错误方面相当无用的问题可能是值得的。

    【讨论】:

    • 该问题目前正在解决中,请参阅here。完成后,我将更新问题和答案。感谢您鼓励我发布问题。
    • 你甚至提供了一个我注意到的拉取请求......太棒了!在我不那么谦虚的观点中,PF 来源非常好理解/理解
    猜你喜欢
    • 2020-06-11
    • 2021-03-02
    • 1970-01-01
    • 2013-12-18
    • 2019-01-06
    • 2021-11-28
    • 1970-01-01
    • 1970-01-01
    • 2014-05-01
    相关资源
    最近更新 更多