[ https://issues.apache.org/jira/browse/WICKET-4802?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Martin Grigorov resolved WICKET-4802. ------------------------------------- Resolution: Fixed Fix Version/s: 6.2.0 Assignee: Martin Grigorov All of it looks good to me! Will be available with 6.2.0. Thanks! > Add functionality to be able to export DataTable content > -------------------------------------------------------- > > Key: WICKET-4802 > URL: https://issues.apache.org/jira/browse/WICKET-4802 > Project: Wicket > Issue Type: New Feature > Components: wicket-extensions > Affects Versions: 6.1.0 > Reporter: Jesse Long > Assignee: Martin Grigorov > Priority: Minor > Fix For: 6.2.0 > > Attachments: WICKET-4802.patch > > > In Igor's book he describes a way of exporting a data table to CSV. It > requires tagging exportable columns with a interface, which allows retrieving > of the data for the column by passing it the row model. > I, and I'm sure many others, have implemented this functionality, and we all > have our own CSVExportToolbar, or something similar. The problem is that each > export implementation is checking for instances of their own hand-crafted > IDataColumn interface. This makes it difficult for people to write libraries > that provide columns that will be exportable across the board. > I propose that we add a standard IDataColumn that can be used to tagging > exportable columns, and which every CSVExportToolbar and ExcelExportToolbar > etc can check for when determining which columns to use to export. > Something like: > /** does not need sort parameter, does not need to extend IColumn */ > public interface IDataColumn<R, T> > { > /** get data for row by passing row model, in imodel format to allow this > method to be used for rendering in an abstract implementation. */ > IModel<T> getDataModel(IModel<R> rowModel); > /** get column header, useful in exporting. same signature as > AbstractColumn method */ > IModel<String> getDisplayModel(); > } > Then an abstract implementation, where the user only needs to implement > getDataModel() > public abstract class AbstractDataColumn<R, S, T> > extends AbstractColumn<R, S> > implements IDataColumn<R, T> > { > // normal AbstractColumn constructors. > protected Component createNewDisplayComponent(String componentId, > IModel<T> dataModel) > { > return new Label(componentId, dataModel); > } > @Override > public void populateItem(Item<ICellPopulator<R>> cellItem, String > componentId, IModel<R> rowModel) > { > cellItem.add(createNewDisplayComponent(componentId, > getDataModel(rowModel))); > } > } -- This message is automatically generated by JIRA. If you think it was sent incorrectly, please contact your JIRA administrators For more information on JIRA, see: http://www.atlassian.com/software/jira