未渲染的 p:dataTable 以 pe:exporter PDF 结束
Non rendered p:dataTable ends up in pe:exporter PDF
我有 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 页面上,经过一些操作,根据 listP1
和 listP2
的大小,我得到了正确的结果。
我的问题是在单击 导出按钮后
<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(","));
}
我有 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 页面上,经过一些操作,根据 listP1
和 listP2
的大小,我得到了正确的结果。
我的问题是在单击 导出按钮后
<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(","));
}