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

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

@ManagedBean
@SessionScoped
public class SessionScopedBean implements Serializable {

    .......

} //end of class SessionScopedBean

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

session.getAttribut("SessionScopedBean");

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

@ManagedBean
@ViewScoped
public class ViewScopedBean implements Serializable {

    .......

} //end of class ViewScopedBean

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

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() (в конечном итоге вы хотите иметь ноль javax.servlet импортировать объявления по всему коду JSF):

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

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


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

Другие вопросы по тегам