Для простой постраничной навигации (без отправки чего-либо) вы должны использовать <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>
.
Смотри также: