как получить бобы из области видимости

Я хочу спросить, помещаю ли я свой управляемый компонент в область сеанса, тогда он сохраняется в сеансе. Например, если у меня есть такой компонент

@ManagedBean
@SessionScoped
public class SessionScopedBean implements Serializable {

    .......

} //end of class SessionScopedBean

Затем он сохраняется в сеансе, и во время сеанса я могу получить его, используя

session.getAttribut("SessionScopedBean");

Это даст мне объект SessionScopedBean, и когда сеанс будет уничтожен, я получу null. Теперь я хочу спросить, есть ли у меня в поле зрения мой bean-компонент, то как я могу его получить. Нравится

@ManagedBean
@ViewScoped
public class ViewScopedBean implements Serializable {

    .......

} //end of class ViewScopedBean

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

view.getAttrubute("ViewScopedBean");  //just a code. No actual implementation.

Спасибо


person Basit    schedule 07.02.2012    source источник


Ответы (1)


Они хранятся на карте представления как доступные UIViewRoot#getViewMap():

Map<String, Object> viewMap = FacesContext.getCurrentInstance().getViewRoot().getViewMap();
ViewScopedBean viewScopedBean = (ViewScopedBean) viewMap.get("viewScopedBean");
// ...

Аналогично, вы также должны использовать абстракцию карты сеанса, которая доступна по адресу ExternalContext#getSessionMap() (в конечном итоге вы хотите иметь ноль javax.servlet объявлений импорта во всем коде JSF):

Map<String, Object> sessionMap = FacesContext.getCurrentInstance().getExternalContext().getSessionMap();
SessionScopedBean sessionScopedBean = (SessionScopedBean) sessionMap.get("sessionScopedBean");
// ...

Смотрите также:


Не связанный с конкретной проблемой, это может быть не лучший способ. Посмотрите @ManagedProperty, если это возможно.

person BalusC    schedule 07.02.2012
comment
Является ли параметр viewMap viewMap.get("viewScopedBean"); именем EL? Это работает только для bean-компонентов, управляемых JSF? Если да, то как мне получить bean-компоненты с областью видимости, управляемые CDI (Seam 3)? -› stackoverflow.com/questions/42008956/ - person Kawu; 03.02.2017