2012-01-18 2 views
1

В этом сообщении Dynamic ui:include Я спросил, как я могу хранить объект в каком-либо состоянии, которое могло бы позволить мне загружать новые окна или вкладку одного и того же браузера, и он не был также сохранен в новых окнах. Адриан Митев сказал мне использовать @WindowScoped, вариант расширения MyFaces под названием CODI, и я попытался его реализовать.Как я могу получить объект на @WindowScoped?

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

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

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

@ManagedBean (name="logicBean") 
@WindowScoped 

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

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

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

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

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

ответ

2

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

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

E.g.

@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); 
// ... 
+0

@ BalusC: Большое спасибо! Я знал, что код извлек объект на сессии, но я не знал, как я могу его изменить! Еще раз спасибо! – Filippo1980

+0

Добро пожаловать. – BalusC