使用 f:event 将 ConversationScoped bean 注入 ViewScoped bean

发布于 2024-10-12 12:42:56 字数 661 浏览 6 评论 0原文

我无法将 ConversationScoped bean 注入 ViewScoped bean,因为 ConversationScoped bean 的生命周期可能比 ViewScoped bean 短,反之亦然,具体取决于 ConversationScoped bean 的生命周期是否较长。

为了克服这个限制,我尝试使用 f:event 作为 preRenderView 监听器来执行注入:

<f:metadata>
   <f:event type="preRenderView" listener="#{taskController.initializeTask(workPackageConversation.workPackage)}" />
</f:metadata>

然而这不起作用,监听器initializeTask和getter getWorkPackage都没有被调用。

我意识到我可以使用 FacesContext 从另一个托管 bean 中查找一个托管 bean,但我很好奇为什么这不起作用。是否因为当我从另一个视图导航到一个视图时未调用 f:event 侦听器? IE。没有重定向或直接页面视图?

我还尝试了 Seam 3 Faces 的 s:viewAction 标签,但没有成功。它也不会被调用。

提前致谢。

I can't inject a ConversationScoped bean into a ViewScoped bean, because the ConversationScoped bean could be shorter lived than the ViewScoped one, or vice versa, depending on whether or not the ConversationScoped bean is long-lived.

To get over this limitation, I tried using an f:event to perform the injection as a preRenderView listener:

<f:metadata>
   <f:event type="preRenderView" listener="#{taskController.initializeTask(workPackageConversation.workPackage)}" />
</f:metadata>

This howver is not working, neither the listener initializeTask, nor the getter getWorkPackage are being called.

I realize I can lookup one managed bean from another, using the FacesContext, but I am curious why this isn't working. Is it because the f:event listener isn't called when I navigate to a view from another view? ie. without a redirect or direct page view?

I also tried the s:viewAction tag from Seam 3 Faces, to no avail. It does not get called either.

Thanks in advance.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

雨夜星沙 2024-10-19 12:42:56

我认为生命周期问题不会发挥作用,因为无论如何你总是有一个正常范围的 bean 的代理。您要么在会话处于活动状态时取消引用会话范围的 bean,要么在会话不活动时取消引用会话范围的 bean,但您始终会获得正确的会话。

I would think the lifetime issues would not come into play since you've always got a proxy to the normal-scoped bean anyway. You either dereference the conversation-scoped bean while the conversation is active, or it's not active -- but you'll always get the right conversation.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文