我创建了一些复合组件,需要在Primefaces p:dataExporter中传递可用作“目标”的属性,在p:columnToggler中传递“datasource”。 第一个attr。 “FormID”按预期工作,但第二个“tableID”没有。它在contextMenu下使用。代码:
<composite:interface>
<composite:attribute name="FormID"/>
<composite:attribute name="tableID"/>
</composite:interface>
<composite:implementation>
<p:contextMenu for="#{cc.attrs.FormID}">
<p:submenu label="Export">
<p:menuitem value="Export to XLS" onclick="$('#exportToXLS').click()" />
</p:submenu>
<p:menuitem value="Columns" onclick="$('#toggler').click()" />
</p:contextMenu>
<p:commandLink id="toggler" type="button" />
<p:columnToggler datasource="#{cc.attrs.tableID}" trigger="toggler" />
<p:commandLink id="exportToXLS" ajax="false" width="24">
<p:dataExporter type="xls" target="#{cc.attrs.tableID}"
fileName="fileXls" />
</p:commandLink>
</composite:implementation
这是带有代码的项目的github repo,其中出现了我的问题:https://github.com/ntokarsk/PrimefacesTest
答案 0 :(得分:0)
问题解决了。 我仍然不知道为什么以前的解决方案不起作用 - 但这个解决方案有效。我刚刚阅读了一些旧文章并了解到menuitem本身就是commandLink,所以我将p:dataExporter移动到menuItem中它起作用:D 1件事仍然缺失 - columnTrigger不起作用。有什么想法吗?
这是代码:
<composite:interface>
<p:menuitem value="Export to XLS" ajax="false">
<p:dataExporter type="xls" target=":#{cc.attrs.FormID}:#{cc.attrs.tableID}"
postProcessor="#{edycjaDanychCentrumBean.postProcessXLS}"
fileName="daneCentrumDataTable" />
</p:menuitem>
<p:menuitem value="Export to PDF" ajax="false">
<p:dataExporter type="pdf" target=":#{cc.attrs.FormID}:#{cc.attrs.tableID}"
fileName="daneCentrumDataTable" />
</p:menuitem>
</p:submenu>
<p:menuitem value="Delete" icon="ui-icon-close" />
<p:menuitem id="toggler" value="Columns" icon="ui-icon-calculator">
<p:columnToggler datasource=":#{cc.attrs.FormID}:#{cc.attrs.tableID}" trigger="toggler" />
</p:menuitem>
</p:contextMenu>
</composite:implementation>