0

我有一个在 Tomcat 7.0.34 上运行的后端服务的简单 JSF WebApp

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

我基本上是想弄清楚如何从后端服务中获取对 ApplicationScoped JSF ManagedBeam 的引用,但似乎不可能?

我想避免使用轮询机制,其中 ManagedBean 轮询后端服务以检测对数据模型的更改。我尝试使用 CDI 和 Spring IoC,但这些尝试已被证明是不成功的。

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

谢谢

4

2 回答 2

0

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

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

要将 spring 用于您的 bean,您需要将 Spring 解析器添加到您的 faces-config 中。

<el-resolver>
  org.springframework.web.jsf.el.SpringBeanFacesELResolver
</el-resolver>
于 2013-06-20T09:52:25.523 回答
0

也许不是您要查找的内容,但是您可以在数据模型中使用一种方法来计算数据模型上的哈希值 - 并将该值存储在哈希计算中未包含的表中。

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

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

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

于 2013-06-20T09:57:33.930 回答