JSF перенаправить на другую страницу - PullRequest
5 голосов
/ 27 февраля 2012

У меня есть три страницы XHTML;

  1. index.xhtml
  2. page_1.xhtml
  3. page_2.xhtml

ВСтраница index.xhtml, у меня есть commandButton, которая отправляет пользователя на page_1.xhtml.Все это делается в правиле навигации в faces-config.xml.

Как бы я перенаправил пользователя на page_2.xhtml из index.xhtml, используя другой commandButton, предполагая, что оба действия commandButtons 'связаны свспомогательный класс Java?

Ответы [ 3 ]

20 голосов
/ 27 февраля 2012

Просто свяжите кнопки с различными методами действий, каждый из которых возвращает свой результат.

<h:commandButton value="Go to page 1" action="#{bean.goToPage1}" />
<h:commandButton value="Go to page 2" action="#{bean.goToPage2}" />

с

public String goToPage1() {
    // ...
    return "page_1";
}

public String goToPage2() {
    // ...
    return "page_2";
}

Навигация не требуется.JSF 2.0 поддерживает неявную навигацию.Результатом навигации может быть просто путь / имя файла желаемого целевого вида.Расширение файла в результате является необязательным.

Если вам не обязательно выполнять какие-либо бизнес-действия в навигации или вы можете вместо этого сделать это в конструкторе (post) компонента поддержки целевой страницы.затем вы также можете просто поместить значение результата в action напрямую.

<h:commandButton value="Go to page 1" action="page_1" />
<h:commandButton value="Go to page 2" action="page_2" />

A <h:commandButton>, однако, будет выполнять не перенаправление, а пересылку.Конечный пользователь не увидит изменения URL в адресной строке браузера.На целевой странице нет закладки.Если вы можете, я бы предложил вместо этого использовать <h:button>.

<h:button value="Go to page 1" outcome="page_1" />
<h:button value="Go to page 2" outcome="page_2" />

Или, если вам действительно нужно вызвать деловое действие, но вы хотите выполнить реальное перенаправление,затем добавьте faces-redirect=true в качестве строки запроса к конечному значению.

public String goToPage1() {
    // ...
    return "page_1?faces-redirect=true";
}

public String goToPage2() {
    // ...
    return "page_2?faces-redirect=true";
}

См. также:

3 голосов
/ 10 сентября 2015

Вы также можете сделать это, в любой части вашего кода, чтобы перенаправить на "example.xhtml"

ExternalContext ec = FacesContext.getCurrentInstance()
        .getExternalContext();
try {
    ec.redirect(ec.getRequestContextPath()
            + "/faces/jsf/example.xhtml");
} catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}
0 голосов
/ 27 февраля 2012

Добавьте два случая навигации, как показано ниже. В методах действия возвращайте результаты, соответствующие кнопкам.

            <navigation-rule>
                <from-view-id>index.html</from-view-id>
                <navigation-case>
                    <from-outcome>page1</from-outcome>
                    <to-view-id>page_1.xhtml</to-view-id>
                </navigation-case>
                <navigation-case>
                    <from-outcome>page2</from-outcome>
                    <to-view-id>page_2.xhtml</to-view-id>
                </navigation-case>
            </navigation-rule>
...