JSF从托管bean渲染数据表内容?

时间:2013-05-14 06:19:56

标签: ajax jsf richfaces rendering managed-bean

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

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

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

谢谢,

1 个答案:

答案 0 :(得分: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的更多信息。

此致