Из действия в моем bean-компоненте я пытаюсь перенаправить на другую страницу, ожидающую параметра представления. Каков рекомендуемый способ сделать это в JSF2?
Например, предположим, что моя исходная страница: http://localhost/page1.xhtml
у него есть commandButton, который вызывает действие:
<h:commandButton value="submit" action="#{myBean.submit}" />
где мой bean выглядит так:
@ManagedBean
@RequestScoped
public class MyBean {
private int id;
public String submit() {
//Does stuff
id = setID();
return "success";
}
А теперь я хочу, чтобы при возврате действия 'submit' переходил к http://localhost/page2.xhtml?id=2
Я пытался сделать это с помощью параметра просмотра в моем случае навигации, но с необычными результатами. Фрагмент faces-config выглядит следующим образом:
<navigation-rule>
<from-view-id>/page1.xhtml</from-view-id>
<navigation-case>
<from-outcome>success</from-outcome>
<to-view-id>/page2.xhtml</to-view-id>
<redirect>
<view-param>
<name>id</name>
<value>#{myBean.id}</value>
</view-param>
</redirect>
</navigation-case>
</navigation-rule>
Странное поведение заключается в том, что, хотя myBean настроен на запрос с ограничением области видимости, он вызывает myBean.getId()
только при первой загрузке приложения и повторно использует то же значение для всех последующих вызовов, создавая неверные параметры просмотра для страницы 2.
Итак, я ищу либо лучший способ сделать это, либо причину / решение, почему параметр представления не запрашивается у моего bean-компонента каждый раз.