Как получить beans из области просмотра

Я хочу спросить, помещаю ли я управляемый bean в область сеанса, затем он сохраняется в сеансе "Как если бы у меня был bean, как этот

@ManagedBean
@SessionScoped
public class SessionScopedBean implements Serializable {

    .......

} //end of class SessionScopedBean

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

session.getAttribut("SessionScopedBean");

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

@ManagedBean
@ViewScoped
public class ViewScopedBean implements Serializable {

    .......

} //end of class ViewScopedBean

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

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

Спасибо

Ответ 1

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

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

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

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

См. также:


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