JSF commandButton重定向到下一页/上一页不起作用

时间:2017-05-21 00:40:09

标签: jsf

我希望有一个简单的分页机制,所以当我致电/allhotels?page=2时,我想回到/allhotels?page=1或者回到/allhotels?page=3。我有2个简单的按钮:

<h:form>
    <h:commandButton value="previous" action="#{hotelSearchResult.toPreviousPage}" />
    <h:commandButton value="next" action="#{hotelSearchResult.toNextPage}" />
</h:form>

应该重定向到数据集的下一页/上一页:

public int getPreviousPage() {
    return page > 0 ? page - 1 : 0;
}

public void toPreviousPage() {
    int previous = getPreviousPage();
    ExternalContext context = FacesContext.getCurrentInstance().getExternalContext();
    String url = context.getRequestContextPath() + "/allhotels?page=" + previous;
    try {
        context.redirect(url);
    } catch (IOException e) {
        e.printStackTrace();
    }
}

public int getNextPage() {
    return hotels != null && hotels.size() == 100 ? page + 1 : page;
}

public void toNextPage() {
    int next = getNextPage();
    ExternalContext context = FacesContext.getCurrentInstance().getExternalContext();
    String url = context.getRequestContextPath() + "/allhotels?page=" + next;
    try {
        context.redirect(url);
    } catch (IOException e) {
        e.printStackTrace();
    }
}

但它只调用/pages/allhotels.xhtml

我尝试了很多东西,但从未奏效过:

<f:viewParam name="page" value="#{hotelSearchResult.page}" />
<h:commandButton value="vor" action="#{hotelSearchResult.toNextPage}">
    <f:param name="page" value="#{hotelSearchResult.nextPage}" />
</h:commandButton>

在faces-config.xml:

<navigation-rule>
    <from-view-id>/allhotels</from-view-id>
    <navigation-case>
        <from-outcome>*</from-outcome>
        <to-view-id>*</to-view-id>
        <redirect>
            <redirect-param>
                <name>page</name>
                <value>*</value>
            </redirect-param>
        </redirect>
    </navigation-case>
</navigation-rule>

2个方法To ... Page()甚至都没有被调用...有人可以告诉我如何才能获得最简单的分页机制吗?我已经失去了2个小时......

1 个答案:

答案 0 :(得分:0)

这里有很多关于发送参数和重定向的重复内容。我不明白为什么你通过检查你是否可以在你的bean中返回或转发来使事情复杂化。这意味着在第1页上您有一个返回链接,可以将您重定向到第1页?我会简单地使用disabled上的h:link属性。所以:

<h:link value="previous" disabled="#{hotelSearchResult.page le 1}">
    <f:param name="page" value="#{hotelSearchResult.page - 1}" />
</h:link>
<h:link value="next" disabled="#{hotelSearchResult.page ge 100}">
    <f:param name="page" value="#{hotelSearchResult.page + 1}" />
</h:link>

关于处理参数,请参阅: