You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@myfaces.apache.org by "Cagatay Civici (JIRA)" <de...@myfaces.apache.org> on 2007/03/06 15:37:24 UTC

[jira] Commented: (TOMAHAWK-911) ExcelExport doesn't populate column headers in Excel file

    [ https://issues.apache.org/jira/browse/TOMAHAWK-911?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_12478427 ] 

Cagatay Civici commented on TOMAHAWK-911:
-----------------------------------------

The second issue is not caused by value binding, it happens when a bundle is used. The excel generation happens after restore view phase whereas bundle is loaded at rendering.

> ExcelExport doesn't populate column headers in Excel file 
> ----------------------------------------------------------
>
>                 Key: TOMAHAWK-911
>                 URL: https://issues.apache.org/jira/browse/TOMAHAWK-911
>             Project: MyFaces Tomahawk
>          Issue Type: Bug
>    Affects Versions: 1.1.5-SNAPSHOT
>         Environment: Tomahawk 1.1.5-SNAPSHOT and Sandbox 1.1.5-SNAPSHOT
>            Reporter: Tara Peltier
>         Assigned To: Cagatay Civici
>
> See posting on mailing list:
> http://www.nabble.com/ExcelExport-column-headers-in-Excel-file-tf3302286.html#a9185916
> Body of posting pasted here:
> I have found two areas where the behavior is unexpected, perhaps bugs?
> 1) If the dataTable has sortable=true, then none of the column headers get exported at all.
> 2) If the column header uses a value-binding, it does not get exported to the Excel worksheet in the first row.  If the column header doesn't use a value-binding, then the column header does get exported to the Excel worksheet.
> -----------------------------------------------------------
> Here's more details, as I downloaded the source for ExcelExport and debugged into it, and I believe I have identified the problem area(s).
> Problem 1)
> In ExcelExportPhaseListener, the following method is used to convert each "cell" in the datatable into a value for the Excel spreadsheet.
> private void addColumnValue(HSSFRow rowHeader, UIComponent component, int index) {
>                 HSSFCell cell = rowHeader.createCell((short)index);
>                 cell.setEncoding(HSSFCell.ENCODING_UTF_16);
>                 if(component instanceof ValueHolder) {
>                         String stringValue = RendererUtils.getStringValue(FacesContext.getCurrentInstance(), component);
>                         cell.setCellValue(stringValue);
>                 }
>         }
> When sortable=false on the datatable, the component passed to addColumnValue is of type HtmlOutputText.  However, when sortable=true on the datatable, Tomahawk automatically wraps each column with a sortable header and so the component presented to ExcelExport is of type org.apache.myfaces.custom.sortheader.HtmlCommandSortHeader.   This fails the "if(component instanceof ValueHolder)" check and so doesn't even try to get the value from the column.
> Problem 2)
> The problem revolves around the following line from the method pasted above (ExcelExportPhaseListener.addColumnValue):
> String stringValue = RendererUtils.getStringValue(FacesContext.getCurrentInstance(), component);
> If the column header is defined without using a value binding then the following line in ExcelExportPhaseListener.addColumnValue is evaluated correctly and returns the expected value.
> E.g., for a column header like this
> <t:column>
>   <f:facet name="header"><h:outputText value="TEST COLUMN NAME" /></f:facet>
>   <h:outputText value="#{trans.id}" />
> </t:column>
> the value evaluted by String stringValue = RendererUtils.getStringValue(FacesContext.getCurrentInstance(), component); is "TEST COLUMN NAME"
> and the generated Excel file contains TEST COLUMN NAME in the first row.
> However, if the column header is defined with a value binding (to a messages file for example) then the following line in ExcelExportPhaseListener.addColumnValue is evaluated incorrectly and returns an empty string.
> E.g., for a column header like this
> <t:column>
>   <f:facet name="header"><h:outputText value="#{messages.trans_id}" /></f:facet>
>   <h:outputText value="#{trans.id}" />
> </t:column>
> the value evaluted by String stringValue = RendererUtils.getStringValue(FacesContext.getCurrentInstance(), component); is ""  and the generated Excel file contains an empty string in the first row.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.