最简单的方法是重新渲染您的表格。使用 RichFaces 库有两种方法可以做到这一点:
客户端
a4j:poll组件定义了一种定期轮询服务器以触发状态更改或更新页面部分的方法。它使用一个计时器每 N 毫秒触发一次。
您可以使用它来检查服务器上的缓存数据,然后重新呈现您的表格。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<ui:composition xmlns="http://www.w3.org/1999/xhtml" xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:a4j="http://richfaces.org/a4j"
xmlns:rich="http://richfaces.org/rich">
<h:form>
<a4j:poll id="poll" interval="2000" enabled="#{pollBean.pollEnabled}" render="poll,grid" />
</h:form>
<h:form>
<h:panelGrid columns="2" width="80%" id="grid">
<h:panelGrid columns="1">
<h:outputText value="Polling Inactive" rendered="#{not pollBean.pollEnabled}"></h:outputText>
<h:outputText value="Polling Active" rendered="#{pollBean.pollEnabled}"></h:outputText>
<a4j:commandButton style="width:120px" id="control" value="#{pollBean.pollEnabled?'Stop':'Start'} Polling"
render="poll, grid">
<a4j:param name="polling" value="#{!pollBean.pollEnabled}" assignTo="#{pollBean.pollEnabled}" />
</a4j:commandButton>
</h:panelGrid>
<h:outputText id="serverDate" style="font-size:16px" value="Server Date: #{pollBean.date}" />
</h:panelGrid>
</h:form>
</ui:composition>
有关RichFaces a4j:poll的更多信息。
服务器端
a4j:push作为消费者/生产者架构工作,它不使用计时器,而是使用一条消息来指示客户端重新呈现页面的一部分。
使用此组件,您将能够通过 ManagedBean 中的 java 方法对客户端产生影响(重新渲染 HTML)。也许这里的问题是与您的JSF Managed Bean通信您当前的缓存架构。
有关RichFaces a4j:push的更多信息。
问候,