使用CommandLinks对ExcelExporter进行表面处理

时间:2011-10-13 20:16:30

标签: jsf primefaces

我的应用程序包含Primefaces dataTable中的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}”中包含的数据时。有没有办法格式化链接,以便使用我想要的文本导出它们?

1 个答案:

答案 0 :(得分:1)

我能够通过使用确定导航的动作更改指向链接的链接以及传递参数的setPropertyActionListeners来解决此问题。看起来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>