Как получить 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
, если это возможно.