如何以1秒的间隔更新组件?

时间:2015-06-20 23:25:24

标签: jsf

戴尔在接受采访时被问到这个问题。

new Date()为您提供了一个使用当前日期/时间初始化的Date对象。

假设我的屏幕右上角显示当前时间,一个人就是这样做的。

<h:outputText value="#{bean.presentDateTime}" />

如何修改以始终显示当前日期与时间?

1 个答案:

答案 0 :(得分:3)

基本上,您希望按时间间隔点击服务器并更新结果。这称为“民意调查”。标准的JSF没有内置工具,所以你仍然需要自己编写一些JS代码(或者理论上,抓住一个JSF组件,为你透明地呈现所需的JS代码)。在JavaScript中,您可以使用setInterval()定期执行函数。

因此,一旦为时间戳组件提供了固定ID,

<h:outputText id="presentDateTime" value="#{bean.presentDateTime}" />

并提供以下隐藏的表单,其命令按钮ajax-updates it,

<h:form id="hiddenForm" style="display:none">
    <h:commandButton id="updatePresentDateTime">
        <f:ajax render=":presentDateTime" />
    </h:commandButton>
</h:form>

然后您可以使用在DOM / window / body ready期间执行的以下脚本来运行它。

<script>
    setInterval(function() {
        document.getElementById("hiddenForm:updatePresentDateTime").click();
    }, 1000);
</script>

不要在生产中将它用于此目的(客户端时钟)。作为面试问题的答案(或some showcase page中的一个例子),它最多可以。在生产中,如果有必要的话,可以更好地抓住“纯粹的”JS,以及以合理的较长间隔运行的民意调查,例如1分钟。或者,如果您的环境支持它,请使用push via WS或SSE。