Использование f: событие для внедрения bean-объекта ConversationScoped в bean-компонент ViewScoped - PullRequest
0 голосов
/ 14 января 2011

Я не могу внедрить bean-компонент ConversationScoped в bean-компонент ViewScoped, потому что bean-компонент ConversationScoped может быть короче, чем компонент ViewScoped, или наоборот, в зависимости от того, является ли бин ConversationScoped долгоживущим.1002 * Чтобы обойти это ограничение, я попытался использовать событие f: для выполнения внедрения в качестве прослушивателя preRenderView:

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

Этот принцип не работает, ни прослушиватель initializeTask, ни метод getWorkPackage получателя не работаютПозвонил.

Я понимаю, что могу искать один управляемый компонент из другого, используя FacesContext, но мне любопытно, почему это не работает.Это потому, что слушатель f: не вызывается при переходе к представлению из другого представления?то есть.без перенаправления или прямого просмотра страницы?

Я также пробовал тег s: viewAction из Seam 3 Faces, но безрезультатно.Он также не вызывается.

Заранее спасибо.

1 Ответ

0 голосов
/ 22 января 2011

Я думаю, что жизненные проблемы не вступят в игру, так как у вас всегда есть прокси для бина с нормальной областью действия. Вы либо разыменовываете bean-объект в области разговора, когда разговор активен, либо не активен - но вы всегда получите правильный разговор.

...