【问题标题】:How do update jsf datatable column only如何仅更新 jsf 数据表列
【发布时间】:2014-11-24 15:11:15
【问题描述】:

我在数据表的列中有一个计数器。一旦计数器达到某个时间,我只需要更改该列的背景颜色。正在从数据库中提取表的数据。我正在使用 a4j:poll 重新渲染列,但问题是渲染了整个表。下面是一些代码:

    <a4j:region>
        <h:form>
            <a4j:poll id="poll" interval="1000" enabled="true" reRender="blink" limitToList="true" />
        </h:form>
    </a4j:region>

<h:form id="form1">         
    <a4j:outputPanel id="panel1" ajaxRendered="true">               
    <h:dataTable id="blinks" styleClass="tableClass" value="#{bean.list}" var="_item">
<h:column id="blink">
  <f:facet name="header">
    <h:outputText value="Header1" />
  </f:facet>
    <div id="div1" class="#{bean.check() ? 'red' :''}">
            <h:outputText value="Counter text (counts seconds)" />
</h:column>
</h:dataTable>
</a4j:outputPanel>
</h:form>

【问题讨论】:

    标签: jsf datatable jboss6.x


    【解决方案1】:

    如果您满足以下最低要求'JSF 2.0、EL 2.1 和 Servlet 2.5

    你可以试试Ajax#updateColumn() by Omnifaces,在showcase中有一个使用示例

    注意 Ajax#updateRow() 和 Ajax#updateColumn() 只能更新 当单元格内容被包装在某个容器组件中时 一个固定的 ID。

    【讨论】:

    • 谢谢丹尼尔。我会试一试,然后再更新。
    • Daniel,我能够使用 Omnifaces 实现一个解决方案。谢谢你的建议。
    【解决方案2】:

    也许您可以使用推送服务器端事件来触发客户端更新,而不是使用执行完整形式的轮询。

    http://livedemo.exadel.com/richfaces-demo/richfaces/push.jsf?tab=choices&cid=987178

    如何使用它的完整描述:Using RichFaces Push and DataTable Ajax Keys for Partial Tables Updates

    【讨论】:

    • PushEventListener 不再存在,因此我无法尝试此解决方案。
    【解决方案3】:

    你应该按列id重新渲染,但是因为你有来自数据库的数据,而且它是一个列表,你能确定你可以做什么调用 which real 可以更新一列吗?

    【讨论】:

    • 抱歉,我无法理解您的问题。尽管如此,我还是找到了使用 OmniFaces 组件的解决方案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-02
    • 1970-01-01
    • 2023-02-16
    相关资源
    最近更新 更多