JSF 2.0 commandLink:如何在浏览器中传递页码作为参数?

时间:2012-04-03 11:56:34

标签: jsf-2

我想通过JSF commandLink标签从浏览器中的表中传递搜索结果的每个点击页面的数字。但它不起作用。我总是得到以下网址:http://localhost:myport/kundenVerwaltungWebClient/searchPerson.jsf

浏览器中的URL应如下所示: http://localhost:myport/kundenVerwaltungWebClient/searchPerson.jsf?pageNum=6

这是视图(searchPerson.xhtml):

... <!-- The paging links -->
                                    <t:dataList value="#{controller.pages}" var="page">
                                        <h:commandLink value="#{page}" actionListener="#{controller.page}"
                                            rendered="#{page != controller.currentPage}" >
                                            <f:param name="pageNum" value="#{page}" />
                                        </h:commandLink>
                                        <b><h:outputText value="#{page}" escape="false"
                                            rendered="#{page == controller.currentPage}" /></b>
                                    </t:dataList> ...

这是托管bean:

@ManagedBean @SessionScoped public class Controller { private String pageNum; ... //Getter and Setter }

有人可以告诉我这里的错误吗?

我提前感谢你。

1 个答案:

答案 0 :(得分:1)

<h:commandLink>发送POST请求,但您显然想发送GET请求。如果要发送GET请求,则需要使用<h:link>而不是<h:commandLink>

<h:link value="#{page}" rendered="#{page != controller.currentPage}" >
    <f:param name="pageNum" value="#{page}" />
</h:link>

(顺便说一下,这不需要<h:form>,所以如果你在视图中没有任何其他命令链接/按钮,你可以安全地删除它)

要替换actionListener作业,请将其放在视图的顶部:

<f:metadata>
    <f:viewParam name="pageNum" value="#{controller.currentPage}" />
    <f:event type="preRenderView" listener="#{controller.page}" />
</f:metadata>

另见: