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.