Как реализовать навигацию JSF между двумя страницами без использования футляра навигации вface-config.xml - PullRequest
2 голосов
/ 18 ноября 2011

Я ищу другой способ навигации JSF, кроме упоминания случаев навигации в faces-config.xml.

В настоящее время я использую faces-config.xml для навигации.Я хочу привести его в порядок.

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

Ответы [ 3 ]

5 голосов
/ 18 ноября 2011

Для простой постраничной навигации (без отправки чего-либо) вы должны использовать <h:outputLink> вместо <h:commandLink>.

Итак, вместо из

<h:form>
    <h:commandLink value="Page 1" action="page1" />
    <h:commandLink value="Page 2" action="page2" />
    <h:commandLink value="Page 3" action="page3" />
</h:form>

и эти навигационные случаи

<navigation-rule>
    <navigation-case>
        <from-outcome>page1</from-outcome>
        <to-view-id>page1.jsf</to-view-id>
    </navigation-case>
    <navigation-case>
        <from-outcome>page2</from-outcome>
        <to-view-id>page2.jsf</to-view-id>
    </navigation-case>
    <navigation-case>
        <from-outcome>page3</from-outcome>
        <to-view-id>page3.jsf</to-view-id>
    </navigation-case>
</navigation-rule>

Вы должны использовать

<h:outputLink value="page1.jsf">Page 1</h:outputLink>
<h:outputLink value="page2.jsf">Page 2</h:outputLink>
<h:outputLink value="page3.jsf">Page 3</h:outputLink>

Для реальных отправлений формы вам следует переписать методы действия, чтобы они возвращали void или null вместо результата. Итак, вместо из

<h:form>
     <h:inputText value="#{bean.query}" />
     <h:commandButton value="Search" action="#{bean.search}" />
</h:form>

с

public String search() {
    results = searchService.find(query);
    return "results";
}

на одной странице и

<h:dataTable value="#{bean.results}" var="result">
    ...
</h:dataTable>

на другой странице и этот навигационный кейс

<navigation-rule>
    <from-view-id>search.jsf</from-view-id>
    <navigation-case>
        <from-outcome>results</from-outcome>
        <to-view-id>results.jsf</to-view-id>
    </navigation-case>
</navigation-rule>

Вы должны использовать

<h:form rendered="#{empty bean.results}">
     <h:inputText value="#{bean.query}" />
     <h:commandButton value="Search" action="#{bean.search}" />
</h:form>
<h:dataTable value="#{bean.results}" var="result" rendered="#{not empty bean.results}">
    ...
</h:dataTable>

с

public void search() {
    results = searchService.find(query);
}

При необходимости вы можете включить фрагменты страницы на <jsp:include>.

Смотри также:

2 голосов
/ 18 ноября 2011

// JSF

<h:outputLink value="login.xhtml" >
    Login page
</h:outputLink>

// Вывод HTML

<a href="login.xhtml">
    Login page
</a>

Для получения дополнительной информации см. Этот URL: -

пример commandLink и outputLink

0 голосов
/ 18 ноября 2011

Вы можете установить возвращаемое значение действия навигации на имя страницы, на которую вы хотите перейти (например, return "page2"; для переключения на page2.jsf ). Но, насколько мне известно, эта функция была впервые реализована в JSF 2.0.

...