在 primefaces 数据表中显示计时器 setInterval
Display a chronometer, setInterval, in a primefaces datatable
我刚开始使用 Primefaces 程序。我想在 Datatable
中显示计时器。我想使用 setInterval
来显示 "real time chronometer"。我在属性 synopticBean.enteredTime
中得到了一个 Date 对象,我用它来开始计数。
但我不知道如何调用 JavaScript 函数来显示计时器。
<p:dataTable var="synopticBean" value="#{synopticLocationBean.synopticBeans}">
<p:column headerText="Family">
<h:outputText value="#{synopticBean.family}" />
</p:column>
<p:column headerText="id">
<h:outputText value="#{synopticBean.brNumber}" />
</p:column>
<p:column headerText="Target Time">
<h:outputText value="#{synopticBean.referenceTime}" />
</p:column>
<p:column headerText="Δ">
<h:outputText value="setInterval(function(){ alert("Hello"); }, 3000);" />
</p:column>
<p:column headerText="Elapsed Time">
<h:outputText value="#{synopticBean.enteredTime}" />
</p:column>
</p:dataTable>
我想要的结果是一个数据表,其中最后两列显示减少和增加的实时计时器:
我的数据可以通过 java bean 获得。 "Elapsed Time" 列得到一个 java 日期,如 "Mon Jan 21 15:26:40 CET 2019"。我不知道如何在列的每个单元格中显示实时计时器。如何将我的 java 日期设置为 setInterval
方法并在我不知道 html 的 ID 的单元格中显示 "result"?
要将您上面的代码转换成一个工作示例,您可以这样做,
<p:dataTable var="synopticBean" value="#{synopticLocationBean.synopticBeans}">
<p:column headerText="Famille">
<h:outputText value="#{synopticBean.family}" />
</p:column>
<p:column headerText="BT">
<h:outputText value="#{synopticBean.brNumber}" />
</p:column>
<p:column headerText="Temps cible">
<h:outputText value="#{synopticBean.referenceTime}" />
</p:column>
<p:column headerText="Δ">
<script type="text/javascript">
//<![CDATA[
setInterval(function(){ console.log("Hello"); }, 3000);
//]]>
</script>
<!-- You can add any HTML code needed to display the chronometer here -->
</p:column>
<p:column headerText="Temps Accumulé">
<h:outputText value="#{synopticBean.enteredTime}" />
</p:column>
</p:dataTable>
如评论中所述,您不为此使用 h:outputText value
- 这是为了获取支持 bean 值。
另请注意,这将为 Δ
列中的每个单元格调用 setInterval
- 我想这就是您想要的。只需将 console.log
调用替换为更新您的计时器的调用即可。
如旁注 - 可能更喜欢只用一个 setInterval
调用来更新所有计时器,而不是对 Δ
列中的每个单元格进行一个调用。最后就看你想在这里完成什么了。
@Kukeltje 的解决方案,我使用了 Primefaces 扩展,但我不知道如何通过值启动我的计数器。我可以有一个日期对象或一个毫秒作为 long 类型,但我不知道如何使用这两个值之一可以作为我的计数器的起始值。
我将以下包含添加到我的 JSF 页面中:
xmlns:pe="http://primefaces.org/ui/extensions"
和我的 pom.xml 文件:
<dependency>
<groupId>org.primefaces.extensions</groupId>
<artifactId>primefaces-extensions</artifactId>
<version>6.0.0</version>
</dependency>
所以 table :
<p:dataTable var="synopticBean" value="#{synopticLocationBean.synopticBeans}">
<p:column headerText="Family">
<h:outputText value="#{synopticBean.family}" />
</p:column>
<p:column headerText="BT">
<h:outputText value="#{synopticBean.brNumber}" />
</p:column>
<p:column headerText="Target time">
<h:outputText value="#{synopticBean.referenceTime}" />
</p:column>
<p:column headerText="Δ">
<pe:timer
style="color:grey;"
forward="true"
format="HH:mm:ss"/>
</p:column>
<p:column headerText="Elapsed time">
<h:outputText value="#{synopticBean.enteredTime}" />
</p:column>
</p:dataTable>
我刚开始使用 Primefaces 程序。我想在 Datatable
中显示计时器。我想使用 setInterval
来显示 "real time chronometer"。我在属性 synopticBean.enteredTime
中得到了一个 Date 对象,我用它来开始计数。
但我不知道如何调用 JavaScript 函数来显示计时器。
<p:dataTable var="synopticBean" value="#{synopticLocationBean.synopticBeans}">
<p:column headerText="Family">
<h:outputText value="#{synopticBean.family}" />
</p:column>
<p:column headerText="id">
<h:outputText value="#{synopticBean.brNumber}" />
</p:column>
<p:column headerText="Target Time">
<h:outputText value="#{synopticBean.referenceTime}" />
</p:column>
<p:column headerText="Δ">
<h:outputText value="setInterval(function(){ alert("Hello"); }, 3000);" />
</p:column>
<p:column headerText="Elapsed Time">
<h:outputText value="#{synopticBean.enteredTime}" />
</p:column>
</p:dataTable>
我想要的结果是一个数据表,其中最后两列显示减少和增加的实时计时器:
我的数据可以通过 java bean 获得。 "Elapsed Time" 列得到一个 java 日期,如 "Mon Jan 21 15:26:40 CET 2019"。我不知道如何在列的每个单元格中显示实时计时器。如何将我的 java 日期设置为 setInterval
方法并在我不知道 html 的 ID 的单元格中显示 "result"?
要将您上面的代码转换成一个工作示例,您可以这样做,
<p:dataTable var="synopticBean" value="#{synopticLocationBean.synopticBeans}">
<p:column headerText="Famille">
<h:outputText value="#{synopticBean.family}" />
</p:column>
<p:column headerText="BT">
<h:outputText value="#{synopticBean.brNumber}" />
</p:column>
<p:column headerText="Temps cible">
<h:outputText value="#{synopticBean.referenceTime}" />
</p:column>
<p:column headerText="Δ">
<script type="text/javascript">
//<![CDATA[
setInterval(function(){ console.log("Hello"); }, 3000);
//]]>
</script>
<!-- You can add any HTML code needed to display the chronometer here -->
</p:column>
<p:column headerText="Temps Accumulé">
<h:outputText value="#{synopticBean.enteredTime}" />
</p:column>
</p:dataTable>
如评论中所述,您不为此使用 h:outputText value
- 这是为了获取支持 bean 值。
另请注意,这将为 Δ
列中的每个单元格调用 setInterval
- 我想这就是您想要的。只需将 console.log
调用替换为更新您的计时器的调用即可。
如旁注 - 可能更喜欢只用一个 setInterval
调用来更新所有计时器,而不是对 Δ
列中的每个单元格进行一个调用。最后就看你想在这里完成什么了。
@Kukeltje 的解决方案,我使用了 Primefaces 扩展,但我不知道如何通过值启动我的计数器。我可以有一个日期对象或一个毫秒作为 long 类型,但我不知道如何使用这两个值之一可以作为我的计数器的起始值。
我将以下包含添加到我的 JSF 页面中:
xmlns:pe="http://primefaces.org/ui/extensions"
和我的 pom.xml 文件:
<dependency>
<groupId>org.primefaces.extensions</groupId>
<artifactId>primefaces-extensions</artifactId>
<version>6.0.0</version>
</dependency>
所以 table :
<p:dataTable var="synopticBean" value="#{synopticLocationBean.synopticBeans}">
<p:column headerText="Family">
<h:outputText value="#{synopticBean.family}" />
</p:column>
<p:column headerText="BT">
<h:outputText value="#{synopticBean.brNumber}" />
</p:column>
<p:column headerText="Target time">
<h:outputText value="#{synopticBean.referenceTime}" />
</p:column>
<p:column headerText="Δ">
<pe:timer
style="color:grey;"
forward="true"
format="HH:mm:ss"/>
</p:column>
<p:column headerText="Elapsed time">
<h:outputText value="#{synopticBean.enteredTime}" />
</p:column>
</p:dataTable>