Java JSF+;在ApacheTomcat7上运行的RESTWebApp

Java JSF+;在ApacheTomcat7上运行的RESTWebApp,java,spring,jsf,primefaces,tomcat7,Java,Spring,Jsf,Primefaces,Tomcat7,我有一个简单的JSFWebApp,它的后端服务运行在Tomcat7.0.34上 如果您有一个JSF ManagedBean负责处理用于呈现UI组件的数据模型,那么后端服务如何通知JSF数据模型的更改 我基本上是想弄清楚如何从后端服务获取对应用程序处理的JSF ManagedBeam的引用,但似乎不可能 我希望避免使用轮询机制,即ManagedBean轮询后端服务以检测对数据模型的更改。。我曾尝试使用CDI和Spring IoC,但都没有成功 如果需要,我可以提供示例代码 谢谢我建议不要这样做。更

我有一个简单的JSFWebApp,它的后端服务运行在Tomcat7.0.34上

如果您有一个JSF ManagedBean负责处理用于呈现UI组件的数据模型,那么后端服务如何通知JSF数据模型的更改

我基本上是想弄清楚如何从后端服务获取对应用程序处理的JSF ManagedBeam的引用,但似乎不可能

我希望避免使用轮询机制,即ManagedBean轮询后端服务以检测对数据模型的更改。。我曾尝试使用CDI和Spring IoC,但都没有成功

如果需要,我可以提供示例代码


谢谢

我建议不要这样做。更有意义的是,您的managedbean将向您的服务添加某种侦听器实现,并以这种方式得到通知。在正确的设计中,后端服务不知道托管bean的存在

如果您仍然想这样做,关键是让Spring管理jsf managedbeans,而不是jsf本身。然后,您可以将(应用程序范围的!)托管bean注入到您的服务中

要将spring用于bean,需要将spring解析器添加到faces配置中

<el-resolver>
  org.springframework.web.jsf.el.SpringBeanFacesELResolver
</el-resolver>

org.springframework.web.jsf.el.SpringBeanFacesELResolver

可能不是您想要的,但您可以在数据模型中使用一个方法,在数据模型上计算哈希值,并将该值存储在哈希计算中不包含的表中。

如果数据模型发生更改,则后端的存储过程应更新哈希

虽然您希望避免使用轮询机制,但您现在有一个您希望知道的值已更改。与@Joeri的答案类似,您的模型和控制器应该是解耦的——因为将来可能会有多个控制器


如果您有一个应用程序范围的bean,它会定期检查散列-它不会提供您所需要的吗?

谢谢大家,我还没有在faces配置中尝试Spring解析器方法。。当您谈到使用侦听器实现时,您是否建议查看PropertyChangeListener和PropertyChangeSupport观察者模式的使用?@James,这取决于您的用例。我只需要创建一个侦听器接口和实现来支持您想要传递的消息。虽然这是一种使用哈希方法检查模型更改的优雅方法,但我更愿意使用侦听器实现。但是,如果我不能对我原来的问题取得任何进展,我当然会考虑你提出的技术。