Jsf 如何从outputLink调用托管bean方法?
这可能已经涵盖了一些地方,但我有困难形成搜索引擎的问题,并没有商品线索到目前为止 我正在处理一个充当实体视图的页面。许多结果来自数据库,一次只显示少数结果。所以你们可以想象,我想建立一个链接列表,将用户带到另一个实体页面。这是我所有的代码-没有PrimeFaces或任何其他前端漂亮的分页解决方案。至少现在是这样 对守则:Jsf 如何从outputLink调用托管bean方法?,jsf,pagination,managed-bean,Jsf,Pagination,Managed Bean,这可能已经涵盖了一些地方,但我有困难形成搜索引擎的问题,并没有商品线索到目前为止 我正在处理一个充当实体视图的页面。许多结果来自数据库,一次只显示少数结果。所以你们可以想象,我想建立一个链接列表,将用户带到另一个实体页面。这是我所有的代码-没有PrimeFaces或任何其他前端漂亮的分页解决方案。至少现在是这样 对守则: @Named @SessionScoped public class ArticleIndexBean { List<Article> articleLis
@Named
@SessionScoped
public class ArticleIndexBean {
List<Article> articleList=new ArrayList<>();
List<Article> articleSubList=new ArrayList<>();
@PostConstruct
public void loadScreenSupport() {
search();
toEntityPage(1);
}
protected void search() {
// this method sets articleList which is the full list fetched from the database
}
public void toEntityPage(int pageNumber) {
// this method sets articleSubList which is a subset of articleList
}
如果我们可以直接调用
toEntityPage(pageNumber)
当然会更好,但这样做很好。假设您使用的是JSF 2.2,您可以使用viewParam
在GET参数中检索页面,并在呈现之前调用方法(默认情况下,在INVOKE_应用程序
阶段实际调用)
Facelets:
<f:metadata>
<f:viewParam name="page" value="#{articleIndexBean.entityPage}" />
<f:viewAction action="#{articleIndexBean.loadScreenSupport}" />
</f:metadata>
爪哇:
@Named
@会议范围
公共类ArticleIndexBean{
名单
我使用的是TomEE 1.6,所以我只能使用myfaces-api-2.1.13.jar。按照您针对faces 2.1或更早版本的解决方案,我在
方面遇到了麻烦。我应该如何定义f
命名空间?我的代码示例只是我正在做的工作的一小部分。分页实际上是在另一个视图中实现的。出于某种原因,我不知道在这里讨论这些问题,并认为它们与f:元数据声明有关。现在,我知道它们不是。您的解决方案工作正常。谢谢Laurent。
<f:metadata>
<f:viewParam name="page" value="#{articleIndexBean.entityPage}" />
<f:viewAction action="#{articleIndexBean.loadScreenSupport}" />
</f:metadata>
<f:event type="preRenderView" listener="#{articleIndexBean.loadScreenSupport}" />
@Named
@SessionScoped
public class ArticleIndexBean {
List<Article> articleList=new ArrayList<>();
List<Article> articleSubList=new ArrayList<>();
int pageNumber = 1; // by default first page
public void loadScreenSupport() {
search();
toEntityPage(pageNumber);
}
public int getPageNumber() {
return pageNumber;
}
public void setPageNumber(int pageNumber) {
this.pageNumber = pageNumber;
}
protected void search() {
// this method sets articleList which is the full list fetched from the database
}
public void toEntityPage(int pageNumber) {
// this method sets articleSubList which is a subset of articleList
}
}
<h:outputLink value="resultPage.xhtml">
<h:outputText value="2" />
<f:param name="page" value="2" />
</h:outputLink>