Как передать параметр из RequestScoped в бин ViewScoped - PullRequest
0 голосов
/ 28 июля 2011

У меня есть простая форма, где вы можете ввести String. При отправке формы пользователь перенаправляется на другую страницу, которая повторяет ввод пользователя. На первой странице используется бин RequestScoped, тогда как на второй странице используется бин ViewScoped.

Первая страница:

    <h:form>
        Type a String: <h:inputText value="#{requestScopedBean.property}"></h:inputText>
        <h:commandButton value="To View" action="#{requestScopedBean.toViewScopedBean}">
            <f:setPropertyActionListener target="#{viewScopedBean.property}" value="#{requestScopedBean.property}" />
            <f:ajax execute="@form" />
        </h:commandButton>
    </h:form>

Вторая страница:

    This is the property passed by the requestScoped bean: <h:outputText value="#{viewScopedBean.property}"></h:outputText><br/>
    This is the property created in the PostConstruct: <h:outputText value="#{viewScopedBean.otherProperty}"></h:outputText>

Я понимаю, почему это не работает. Когда форма отправлена, viewScopedBean.property устанавливается на правильное значение, но затем мы переключаемся на другое представление, поэтому создается новый ViewScopedBean. Вот почему значение из запроса теряется.

Как передать параметр со страницы 1 на страницу 2 без изменения области действия компонента ?

1 Ответ

0 голосов
/ 29 июля 2011

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

public String toViewScopedBean(String string){
    Map<String,Object> requestMap = FacesContext.getCurrentInstance().getExternalContext().getRequestMap();
    requestMap.put("StringKey", string);
    return "toViewScopedBean";
}

, а затем получить значение из valueScopedBean

public String getProperty(){
    Map<String, Object> requestMap = FacesContext.getCurrentInstance().getExternalContext().getRequestMap();
    return (String) requestMap.get("StringKey");
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...