Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jsf 如何从outputLink调用托管bean方法?_Jsf_Pagination_Managed Bean - Fatal编程技术网

Jsf 如何从outputLink调用托管bean方法?

Jsf 如何从outputLink调用托管bean方法?,jsf,pagination,managed-bean,Jsf,Pagination,Managed Bean,这可能已经涵盖了一些地方,但我有困难形成搜索引擎的问题,并没有商品线索到目前为止 我正在处理一个充当实体视图的页面。许多结果来自数据库,一次只显示少数结果。所以你们可以想象,我想建立一个链接列表,将用户带到另一个实体页面。这是我所有的代码-没有PrimeFaces或任何其他前端漂亮的分页解决方案。至少现在是这样 对守则: @Named @SessionScoped public class ArticleIndexBean { List<Article> articleLis

这可能已经涵盖了一些地方,但我有困难形成搜索引擎的问题,并没有商品线索到目前为止

我正在处理一个充当实体视图的页面。许多结果来自数据库,一次只显示少数结果。所以你们可以想象,我想建立一个链接列表,将用户带到另一个实体页面。这是我所有的代码-没有PrimeFaces或任何其他前端漂亮的分页解决方案。至少现在是这样

对守则:

@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>