jsf - 根据 PrimeFaces LazyDataModel<T> 返回的行数渲染 JSF/PrimeFaces 组件

标签 jsf primefaces jsf-2.2

我需要根据 PrimeFaces LazyDataModel<T> 返回的行数来渲染一些组件.

例如,<p:panelGrid>仅当关联的惰性数据模型返回至少一行时才应呈现。

<p:panelGrid rendered=#{bean.rowCount gt 0}>

    ...
    ...
    ...

</p:panelGrid>

下面给出了 <p:dataList>这是延迟加载的。

<p:dataList var="row"
            value="#{bean}"
            first="0"
            rows="10"
            paginator="true"
            lazy="true">

            ...
            ...
            ...

<p:dataList>

这个 bean 很普通:

@Named
@ViewScoped
public class Bean extends LazyDataModel<Entity> implements Serializable
{
    @Inject
    private BeanService service;
    private static final long serialVersionUID = 1L;

    @Override
    public List<Entity> load(int first, int pageSize, String sortField, SortOrder sortOrder, Map<String, Object> filters)
    {
        setRowCount(service.rowCount());
        return service.getList(first, pageSize);
    }    
}

给定的<p:panelGrid>rendered 时,将不再渲染,因为惰性数据模型不可用。 <p:panelGrid> 的属性已处理。

如果两者的顺序都是<p:panelGrid>,则正确的事情可能会发生。和<p:dataList>是互换的,但这是一个设计问题,不能考虑。

给定的<p:dataList>包含用于预览的复杂报告数据列表(与 <p:dataTable><p:panelGrid> 和其他一些组合),然后将其导出到 MS-Excel 工作簿并下载文件。

报告数据列表(由 <p:dataList> 保存)取决于多个(自定义)过滤器,这些过滤器由 <p:inputText> 组成。 , <p:selectOneMenu>等等。该列表是根据过滤器值/事件进行 AJAX 更新的。

列表随时可能为空,具体取决于过滤器的值。无论如何,如果<p:dataList>为空,<p:panelGrid>不得渲染( <p:panelGrid> 只是一个简单的示例。还有其他组件)。

如何根据 LazyDataModel<T> 返回的行数来渲染此类组件(最终来自关联的数据库)没有任何额外的开销来执行额外的 JPA 查询来计算根据过滤器的值可以返回的行数(当已经有非常复杂/昂贵的报告 JPA 标准查询正在执行时)?

最佳答案

当您在 load 中设置行数时,您可能会移动

setRowCount(service.rowCount());

进入加载之前执行的方法(或者在行计数的 getter 中作为最后一种可能性),因为我假设 service.rowCount() 本身不执行加载,或者我是错了?

关于jsf - 根据 PrimeFaces LazyDataModel<T> 返回的行数渲染 JSF/PrimeFaces 组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26287477/

相关文章:

ajax - Spring Remember Me 身份验证后 JSF/Primefaces Ajax 请求的 ViewExpiredException

javascript - 如何使用javascript绘制图表?

jsf - 跳过处理 p :dataTable when a button is pressed which only needs to get selected rows 内部的输入组件

jsf - 如何使用 FacesContext 获取 JSF 中以前的 URL?

jsf - 如何在 p :tabView component 中动态添加和删除选项卡

jsf - 如何使用 h :commandLink to update and open a p:dialog without reloading other components

java - JSF 中的支持 bean String[] 访问

jquery - 日期格式jqplotcategoryaxisrenderer后添加刻度

validation - 验证非必填字段

file-upload - Glassfish 4,JSF 2.2和PrimeFaces FileUploadEvent不能一起使用