将参数传递给实现LazyDataModel的类

时间:2012-04-06 02:19:59

标签: jsf primefaces

我的一个JSF通过元数据和f:ViewParm标签接收参数。我在预渲染视图中的辅助bean中使用这些参数来查询数据库并构建我的数据表视图列表。它工作正常,但现在我需要切换到lazyDataModel(我正在使用Primefaces 3.2)。如果我按照示例,那么我需要实现LazyDataModel,它在辅助bean的构造函数中完成。我可以这样做,但后来我无法访问参数。我的问题是如何获取参数并传递给实现LazyDataModel的类(比如LazyCarDataModel)。我想在LazyCarDataModel的重写加载方法中使用这些参数。我无法在构造函数中访问传入参数。任何建议/技巧来处理这种情况将不胜感激。

彼得

1 个答案:

答案 0 :(得分:1)

在设置了视图参数后,您可以使用<f:event type="preRenderView">来调用支持bean方法。

E.g。

<f:metadata>
    <f:viewParam name="carId" value="#{bean.car}" converter="#{carConverter}" />
    <f:event type="preRenderView" listener="#{bean.init}" />
</f:metadata>

private Car car;
private transient DataModel<Something> model;

public void init() {
    model = buildSomehowBasedOn(car);
}

您也可以在数据表的getter中引入延迟加载。

public DataModel<Something> getModel() {
    if (model == null) {
        model = buildSomehowBasedOn(car);
    }

    return model;
}