0

我无法将 ConversationScoped bean 注入 ViewScoped bean,因为 ConversationScoped bean 的寿命可能比 ViewScoped 的寿命短,反之亦然,具体取决于 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 标签,但无济于事。它也不会被调用。

提前致谢。

4

1 回答 1

0

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

于 2011-01-22T03:11:35.527 回答