【问题标题】:a4j:poll start polling after JSF renderinga4j:poll 在 JSF 渲染后开始轮询
【发布时间】:2014-05-22 09:03:12
【问题描述】:

我想在 JSF 渲染完成之后使用 a4j:poll 在我的视图中加载内容,以提高视图本身的渲染速度。我认为交付页面然后开始轮询内容是很常见的任务。但是,如果我有这样的构造:

     <h:form>
      <a:region>
        <a:poll id="feed" reRender="feedReader" interval="100"/>
        <a:outputPanel id="feedReader">
          <h2>
            <a  href="#{feedReader.link}">
              <h:outputText value="#{feedReader.title}" />
            </a>
          </h2>
          <h:outputText value="#{feedReader.teaser}" />
        </a:outputPanel>
      </a:region>
    </h:form>

a:outputPanel 中的所有内容都将在初始页面请求时呈现。我怎样才能抑制这种行为?

【问题讨论】:

  • 我想你会发现轮询确实是在 JSF 视图渲染之后才开始的,你的意思是在 DOM 完全加载之后?
  • 是的,我就是这个意思。

标签: richfaces ajax4jsf


【解决方案1】:

我不认为有任何开箱即用的东西允许这样做,您可以设置一个 bean 属性,当页面完全加载时通过 javascript(或本例中的 jQuery)命令激活轮询,请参见示例下面,

或者,您可以在轮询操作中创建一个计数器,以便忽略前几个“轮询”

除非你有一些非常大的资源被加载到页面中,否则它应该不会有太大的影响

<h:form>
  <a:region>
    <a4j:jsFunction name="enablePollJs" action="#{yourBean.enablePoll} reRender="feed" />
    <a:poll id="feed" reRender="feedReader" interval="100" enabled="#{yourBean.pollEnabled}" />
    <a:outputPanel id="feedReader">
      <h2>
        <a  href="#{feedReader.link}">
          <h:outputText value="#{feedReader.title}" />
        </a>
      </h2>
      <h:outputText value="#{feedReader.teaser}" />
    </a:outputPanel>
  </a:region>
</h:form>

//Then add this to your javascript / header
<script>
    jQuery(document).ready(function(){
        enablePollJs();
    });
</script>

【讨论】:

猜你喜欢
  • 2016-06-04
  • 1970-01-01
  • 1970-01-01
  • 2013-02-06
  • 1970-01-01
  • 1970-01-01
  • 2011-09-09
  • 2012-11-28
  • 2012-04-01
相关资源
最近更新 更多