我有一个简单的JSF WebApp,其后端服务在Tomcat 7.0.34上运行
如果您有一个JSF ManagedBean负责处理用于呈现UI组件的数据模型,那么后端服务如何通知JSF数据模型的更改?
我基本上试图弄清楚如何从后端服务获取对ApplicationScoped JSF ManagedBeam的引用,但似乎不可能?
我想避免使用轮询meachanism,其中ManagedBean轮询后端服务以检测对数据模型的更改。我尝试使用CDI和Spring IoC,其中尝试已被证明是不成功的。
如果需要,我可以提供示例代码..
由于
答案 0 :(得分:0)
我会反对这一点。更有意义的是,您的managedbean会为您的服务添加某种侦听器实现,并以这种方式得到通知。在适当的设计中,您的后端服务不知道您的托管bean存在。
如果你仍然想要这样做,那就是让Spring管理你的jsf managedbeans,而不是jsf本身。然后,您可以将(应用程序范围的!)托管bean注入您的服务。
要为bean使用spring,需要将Spring解析器添加到faces-config。
<el-resolver>
org.springframework.web.jsf.el.SpringBeanFacesELResolver
</el-resolver>
答案 1 :(得分:0)
也许不是你想要的,但你可以在你的数据模型中有一个方法去计算数据模型的哈希值 - 并将该值存储在一个未包含在哈希计算中的表中。
如果数据模型发生更改,则后端的存储过程应更新散列。
虽然您希望避免使用轮询机制,但现在您想知道的值已更改。与@ Joeri的答案类似,您的模型和控制器应该是分离的 - 因为您将来可能有多个控制器。
如果你有一个应用程序范围的bean定期检查哈希 - 它不会给你你需要的东西吗?