xhtml не показывает значения области сеанса

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

Мой класс выглядит следующим образом:

@ManagedBean(name="oneClass")
@SessionScoped
public class OneClassController implements Serializable {

    @ManagedProperty(value="#{myOtherBean}")
    public AnotherClass another;

    @ManagedProperty(value="#{requestBean}")
    public RequestClass request;

    public String foo() {
        another = getAnotherService(request);
        return "page?faces-redirect=true";
    }

    //getters and setters for AnotherClass and RequestClass
}

Теперь класс запроса содержит все значения для запроса веб-службы. Эти значения заполняются в форме на странице xhtml.

Когда пользователь завершает заполнение запроса и запускает действие с кнопки, он входит в метод foo. Отладка показывает запрос с правильными данными, и когда я его вызываю, another заполняется правильно.

Теперь page.xhtml выглядит так:

<h:outputText value="#{requestBean.agentId}" />
<h:outputText value="#{myOtherBean.name}" />
<h:outputText value="#{myOtherBean.lastname}" />

При рендеринге page все значения из requestBean отображаются правильно, но все значения anotherBean отображаются пустыми. Даже обновление страницы не помогает.

Если я активирую кнопку в page.xhtml, чтобы распечатать в методе действия значения из anotherBean:

log.info("Another name: " + another.getName());

печатают нормально.

У меня в web.xml установлен метод сохранения для сервера.

Кстати, это не настоящее соглашение об именах, которое я использую, но сейчас я нахожусь на другом компьютере без каких-либо IDE или JDK, поэтому я пытаюсь воспроизвести код как можно лучше.

Как я могу показать правильные значения в page?


person eSuarez    schedule 15.05.2013    source источник
comment
Что там делает another = getAnotherService(request);, если вы уже вводите его с помощью @ManagedProperty?   -  person kolossus    schedule 16.05.2013


Ответы (1)


Попробуйте использовать,

<h:outputText value="#{oneClass.another.name}" />
<h:outputText value="#{oneClass.another.lastname}" />

Чтобы просмотреть все переменные в sessionScope, вы можете сделать:

<h:outputText value="#{sessionScope}" /> 

Это подтвердит, находится ли «myOtherBean» в области сеанса или нет.

person Himanshu Bhardwaj    schedule 15.05.2013
comment
Спасибо за быстрый ответ, завтра утром попробую, посмотрим, что получится :) - person eSuarez; 15.05.2013
comment
Спасибо, это сработало. Но почему это происходит? Разве нет способа, которым я мог бы просто использовать another.name? - person eSuarez; 15.05.2013