我有一个包含Primefaces数据表中的commandLinks的应用程序。 commandLinks链接到应用程序内的其他页面并传递参数。当我尝试使用Primefaces的ExcelExporter导出dataTable时,生成的.xls文件包含commandLink的value属性,而不是嵌套在commandLink中的outputText的value属性。
dataTable代码中的列:
<p:dataTable var="dataRow" id="myTable">
<p:column>
<f:facet name="header">
<h:outputText value="MyColumn" />
</f:facet>
<h:outputLink value="myPage.xhtml">
<f:param name="columnId" value="#{dataRow.columnId}" />
<h:outputText value="#{dataRow.columnName }" />
</h:outputLink>
</p:column>
</p:dataTable>
ExcelExporter代码:
<h:commandLink>
<h:outputText value="Export" />
<p:dataExporter type="xls" target="myTable" fileName="tableResults"/>
</h:commandLink>
当我使用ExcelExporter导出表时,导出的数据是“ myPage.xhtml”,当我希望它成为“#{dataRow.columnId}”中包含的数据时。有没有一种方法可以设置链接的格式,以便将它们与所需的文本一起导出?
最佳答案
通过使用确定导航的操作和setPropertyActionListeners传递参数来更改到commandLinks的链接,我能够解决此问题。看来PrimeFaces总是从父组件中获取值,因此这似乎是最好的解决方法。 dataExporter代码保持不变。
修改后的xhtml代码:
<p:dataTable var="dataRow" id="myTable">
<p:column>
<f:facet name="header">
<h:outputText value="MyColumn" />
</f:facet>
<h:commandLink value="#{dataRow.columnName}" action="myPage">
<f:setPropertyActionListener target="#{myPage.columnId}"
value="#{dataRow.columnId}"/>
</h:commandLink>
</p:column>
</p:dataTable>
导航规则已添加到faces-config.xml:
<navigation-rule>
<navigation-case>
<from-outcome>myPage</from-outcome>
<to-view-id>/myPage.xhtml</to-view-id>
<redirect />
</navigation-case>
</navigation-rule>