Доступ к компонентам SessionScoped на страницах JSF

Я использую управляемые компоненты SessionScoped в своем приложении:

@ManagedBean
@SessionScoped
public class SampleBean{

private String value;

//getters and setters

}

У меня есть мой контроллер:

@ManagedBean
@SessionScoped
public class SampleController{

@ManagedProperty(value = "#{sampleBean}")
private SampleBean sampleBean;

public String showConfirm() {

return "confirm";

}

public String showComplete() {

return "complete";

}

//getters and setters
}

Логика заключается в том, что у меня есть начальная страница, на которой я ввожу значения. Затем она переходит на страницу подтверждения и, наконец, на страницу завершения. Я должен показать данные, введенные на стартовой странице, на остальных страницах.

Стартовая страница выглядит следующим образом:

файл запуска.xhtml

<h:inputText value="#{sampleBean.value}">
<h:commandLink value="Confirm"  action="#{sampleController.showConfirm()}">

На странице подтверждения я хочу показать эти данные.

подтвердить.xhtml

<h:outputFormat value="#{sampleBean.value}">

Однако я не получаю никакого значения, отображаемого здесь. Я попытался поместить эти значения в sessionMap в методе showConfirm().

public String showConfirm() {

FacesContext context = FacesContext.getCurrentInstance().getExternalContext().getSessionMap().put("sampleBean", sampleBean);

return "confirm";

}

Но также я не могу просмотреть эти значения в файле confirm.xhtml.

Только если я использую <h:outputFormat value="#{sessionScope.sampleBean.value}"> , значения отображаются. Кроме того, я хотел бы сделать это, используя только SessionScope, поскольку все это является частью более крупного приложения с сеансами. Есть ли альтернатива, чтобы сделать это?


person Jini Samuel    schedule 20.09.2013    source источник
comment
Вы забыли использовать тег <h:form>?   -  person Mr.J4mes    schedule 20.09.2013
comment
Спасибо, но я использовал тег <h:form>. Я верю, что делаю что-то неправильно в своем контроллере.   -  person Jini Samuel    schedule 23.09.2013


Ответы (2)


Вы можете получить доступ к компонентам sessionScoped из представлений через компонент контроллера:

<h:inputText value="#{sampleController.sampleBean.value}">

С добавлением геттера/установщика этого управляемого свойства в bean-компоненте контроллера.

person Omar    schedule 20.09.2013
comment
Я попытался указать <h:outputFormat value="#{sampleController.sampleBean.value}"> на странице confirm, но он все еще не отображает никакого значения. - person Jini Samuel; 20.09.2013
comment
Может быть, вам что-то не хватает в представлении ... можете ли вы опубликовать код представления? - person Omar; 20.09.2013
comment
Я попытался распечатать sessionScope, используя <h:outputFormat value="#{sessionScope}"> My SampleController не отображается в sessionscope. Я считаю, что делаю что-то неправильно в своем SampleController. - person Jini Samuel; 23.09.2013
comment
Может ли это конструктор управляемого компонента? Я попробовал ваш точный пример, и он работает нормально, можете ли вы поместить весь код ваших двух управляемых компонентов + представления? - person Omar; 23.09.2013

ваш компонент области сеанса должен реализовать интерфейс Serializable для правильной работы, см. это

person hanan Ahmed    schedule 20.09.2013
comment
Владелец вопроса не указывает ни на одно обнаруженное исключение; более того, у меня этот пример работает без какой-либо реализации Serializable. - person Omar; 21.09.2013
comment
Я пытался реализовать с использованием интерфейса Serializable, но он не работает. - person Jini Samuel; 23.09.2013