我有一个包含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>

09-28 11:20