gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 03:40:47 26 4
gpt4 key购买 nike

我需要根据 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com