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

时间:2011-01-13 22:57:42

标签: jsf-2 cdi seam3

我无法将一个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,但我很好奇为什么这不起作用。是因为当我从另一个视图导航到一个视图时没有调用f:event侦听器?即。没有重定向或直接页面查看?

我也尝试过Seam 3 Faces的s:viewAction标签,但无济于事。它也没有被调用。

提前致谢。

1 个答案:

答案 0 :(得分:0)

我认为终身问题不会发挥作用,因为无论如何你总是有一个代理普通范围的bean。您可以在会话处于活动状态时取消引用会话范围的bean,或者它不活动 - 但您将始终获得正确的对话。

相关问题