使用JSF / Java EE从数据库进行实时更新

使用JSF / Java EE从数据库进行实时更新

我有一个应用程序在以下环境中运行。

  • GlassFish Server 4.0

  • JSF 2.2.8-02

  • PrimeFaces 5.1决赛

  • PrimeFaces Extension 2.1.0

  • OmniFaces 1.8.1

  • EclipseLink 2.5.2具有JPA 2.1

  • MySQL 5.6.11

  • JDK-7u11

有几个公共页面从数据库中延迟加载。一些CSS菜单显示在模板页面的标题上,如显示类别/子类别特征,最畅销,新到达等产品。

CSS菜单根据数据库中的各种产品类别从数据库动态填充。

这些菜单填充在每个页面加载上,这是完全没有必要的。其中一些菜单需要复杂/昂贵的JPA标准查询。

目前,填充这些菜单的JSF托管bean是视图范围的。它们都应该是应用程序作用域,在应用程序启动时只加载一次,并且只有在更新/更改相应数据库表(类别/子类别/产品等)中的某些内容时才更新。

我做了一些尝试来理解WebSokets(从未尝试过,对WebSokets来说是全新的),就像这样这个。他们在GlassFish 4.0上运行良好,但它们不涉及数据库。我仍然无法正确理解WebSokets的工作方式。特别是涉及数据库时。

在这种情况下,当更新/删除/添加到相应的数据库表时,如何通知关联的客户端并使用数据库中的最新值更新上述CSS菜单?

一个简单的例子很棒。


幕布斯6054654
浏览 514回答 3
3回答

慕娘9325324

PrimeFaces具有轮询功能,可自动更新组件。在以下示例中,<h:outputText>将每3秒自动更新一次<p:poll>。如何通知关联的客户端并使用数据库中的最新值更新上述CSS菜单?创建一个类似于process()选择菜单数据的侦听器方法。&nbsp;<p:poll>将自动更新您的菜单组件。<h:form> &nbsp;&nbsp;&nbsp;&nbsp;<h:outputText&nbsp;id="count" &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;value="#{AutoCountBean.count}"/>&nbsp;<!--&nbsp;Replace&nbsp;your&nbsp;menu&nbsp;component--> &nbsp;&nbsp;&nbsp;&nbsp;<p:poll&nbsp;interval="3"&nbsp;listener="#{AutoCountBean.process}"&nbsp;update="count"&nbsp;/></h:form>@ManagedBean@ViewScopedpublic&nbsp;class&nbsp;AutoCountBean&nbsp;implements&nbsp;Serializable&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;int&nbsp;count; &nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;int&nbsp;getCount()&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;count; &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;void&nbsp;process()&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;number++;&nbsp;//Replace&nbsp;your&nbsp;select&nbsp;data&nbsp;from&nbsp;db. &nbsp;&nbsp;&nbsp;&nbsp;}}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java