如何仅更新jsf datatable列

时间:2014-11-24 15:11:16

标签: jsf datatable jboss6.x

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

    <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>

3 个答案:

答案 0 :(得分:1)

如果您满足以下最低要求&#39; JSF 2.0,EL 2.1和Servlet 2.5

您可以试用Ajax#updateColumn() by Omnifaces,有关于如何在展示中使用它的示例

  

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

答案 1 :(得分:0)

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

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

完整说明如何使用此功能:Using RichFaces Push and DataTable Ajax Keys for Partial Tables Updates

答案 2 :(得分:0)

你应该按列id重新呈现,但是因为你有来自数据库的数据,并且它是一个列表,你能确认你可以做什么来调用哪个真实可以更新一列?