jsf - 非渲染 p :dataTable ends up in pe:exporter PDF

标签 jsf primefaces primefaces-extensions

我有 2 个数据表:

<p:dataTable id="tbl1" var="prop1" value="#{bean.prop1}" rendered="#{bean.listP1.size() != 0}">
// ...
</p:dataTable>

<p:dataTable id="tbl2" var="prop2" value="#{bean.prop2}" rendered="#{bean.listP2.size() != 0}">
// ...
</p:dataTable>

在 XHTML 页面上,经过一些操作,根据 listP1listP2 的大小,我得到了正确的结果。

我的问题是点击导出按钮

<h:commandLink>
    <p:graphicImage value="/resources/icons/download.png" style="width : 35px; height:35px"/>
    <pe:exporter type="pdf" target="tbl1, tbl2" fileName="SurveyResults"/>
</h:commandLink>

我得到了错误的结果:我得到了两个表而不是一个,因为其中一个是 size = 0

请问您有解决这个问题的想法吗?

最佳答案

在版本 8 之前,pe:exporter 不关心您提供的数据表是否被渲染,参见 https://github.com/primefaces-extensions/primefaces-extensions.github.com/issues/757

如果您还没有使用版本 8,您可以使用 EL 为 target 属性创建一个动态值。例如:

<pe:exporter type="pdf"
             target="#{empty bean.listP1 ? '' : 'tbl1'}#{empty bean.listP1 or empty bean.listP2 ? '' : ','}#{empty bean.listP2 ? '' : 'tbl2'}"
             fileName="SurveyResults"/>

由于这些表达式有点复杂,您可能希望在 bean 中创建一个方法来创建目标字符串并执行以下操作:

<pe:exporter type="pdf"
             target="#{bean.exporterTargets}"
             fileName="SurveyResults"/>

例如在你的 bean 中:

public String getExporterTargets() {
   return Stream.of(listP1.isEmpty() ? null : "tbl1",
                    listP2.isEmpty() ? null : "tbl2")
                .filter(Objects::nonNull)
                .collect(Collectors.joining(","));
}

关于jsf - 非渲染 p :dataTable ends up in pe:exporter PDF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60076040/

相关文章:

java - 从代码中获取 SelectOneMenu 的所选项目

jsf - 无法使用 PrimeFaces7.0 在 Chartjs 中隐藏图例

regex - 验证器正则表达式模式输入仅接受 2-5 位数字

java - 对话框中的按钮未进入 bean 中声明的函数

javascript - 如何使用ckEditor中的Gists代码片段功能?

jsf - 您如何在当前 View (范围)中找到 CDI bean?

jsf - PrimeFaces 扩展 - 空值属性

java - JSF 2.0 从操作方法返回 null 不保留原始请求参数

jsf - p :message Not displaying in p:dialog

javascript - primefaces codeMirror不加载自己的css和js