我无法将 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 标签,但无济于事。它也不会被调用。
提前致谢。