Как я могу получить объект в @WindowScoped? - PullRequest
1 голос
/ 18 января 2012

В этом посте Динамический интерфейс: включите Я спросил, как я могу сохранить объект в каком-то состоянии, которое может позволить мне загрузить новые окна или вкладку того же браузера, и он также не был сохраненв новых окнах.Адриан Митев сказал мне использовать @WindowScoped, вариант расширения MyFaces под названием CODI, и я попытался реализовать его.

Теперь я должен сказать, что я слепой, и когда я пытался открыть Apache Wiki, мой браузер вылетаетна многих страницах, поэтому я не могу прочитать руководства.

Однако я добавил исходный код в свой проект, и компилятор не выдал никаких ошибок.Проблема в том, что теперь страница, когда я пытаюсь получить бин, сохраненный с помощью @WindowScoped, не работает должным образом!

Я использую этот код в своем бине:

@ManagedBean (name="logicBean" )
@WindowScoped

Вinclude.xhtml Я получаю параметр с этим кодом:

<ui:include src="#{logicBean.pageIncluded}"/> 

И в других моих бинах я получаю LogicBean с этим кодом (и я уверен, что проблема в этом коде)

LogicBean l = (LogicBean) FacesContext.getCurrentInstance().getExternalContext().getSessionMap().get("logicBean");

Как я могу получить «правильный» объект LogicBean?

1 Ответ

2 голосов
/ 18 января 2012

Вы пытаетесь получить LoginBean с карты сеанса. Это работает только для bean-объектов сессионной области со стандартной аннотацией JSF @SessionScoped.

Канонический способ получить доступ к другим bean-компонентам - использовать @ManagedProperty для извлекаемого bean-компонента.

1008 * Е.Г. *

@ManagedBean
@RequestScoped
public class OtherBean {

    @ManagedProperty("#{logicBean}")
    private LogicBean logicBean;

    // Getter+Setter.
}

Если вам действительно нужен доступ к нему внутри блока метода путем программной оценки EL, вам следует использовать Application#evaluateExpressionGet() вместо этого:

FacesContext context = FacesContext.getCurrentInstance();
LogicBean logicBean = context.getApplication().evaluateExpressionGet(context, "#{logicBean}", LogicBean.class);
// ...
...