1

我正在使用 Richfaces 开发一些网页,并使用数据表尝试显示来自远程服务器的一些数据信息。但是一次加载所有数据很慢,所以我使用缓存来存储数据,首先我的缓存是空的,数据表是空的。

理想的目标是从服务器加载一行(假设每行 1 分钟)并存储到我的缓存中,然后附加到数据表的末尾,我的问题是,一旦我检索到一些新数据,如何从 managedbean 呈现数据表的内容进入缓存?

我还使用计时器在固定时间段(1 小时)内从服务器更新缓存值,这意味着稍后可以将新数据添加到缓存中,并且可以从缓存中删除旧数据,这都取决于服务器的最新数据。当我获得新的缓存并需要根据缓存值重新渲染数据表内容时,同样的问题。

谢谢,

4

1 回答 1

2

最简单的方法是重新渲染您的表格。使用 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的更多信息。

问候,

于 2013-05-14T07:59:05.000 回答