You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by mg...@apache.org on 2011/01/11 12:24:54 UTC

svn commit: r1057584 - in /wicket/trunk: wicket-examples/src/main/java/org/apache/wicket/examples/repeater/ wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/repeater/data/table/ wicket-extensions/src/main/java/org/apache/wi...

Author: mgrigorov
Date: Tue Jan 11 11:24:53 2011
New Revision: 1057584

URL: http://svn.apache.org/viewvc?rev=1057584&view=rev
Log:
WICKET-3295 Please use lists instead of arrays

Drop the DataTable/DataGridView constructor that accepts array of columns.
Leave the one that accepts list of columns.

Modified:
    wicket/trunk/wicket-examples/src/main/java/org/apache/wicket/examples/repeater/DataGridPage.java
    wicket/trunk/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/repeater/data/table/AjaxFallbackDefaultDataTable.java
    wicket/trunk/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/grid/AbstractDataGridView.java
    wicket/trunk/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/grid/DataGridView.java
    wicket/trunk/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/table/DataTable.java
    wicket/trunk/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/table/DefaultDataTable.java
    wicket/trunk/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/table/HeadersToolbar.java
    wicket/trunk/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/table/NavigationToolbar.java
    wicket/trunk/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/table/NoRecordsToolbar.java
    wicket/trunk/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/table/filter/FilterToolbar.java

Modified: wicket/trunk/wicket-examples/src/main/java/org/apache/wicket/examples/repeater/DataGridPage.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket-examples/src/main/java/org/apache/wicket/examples/repeater/DataGridPage.java?rev=1057584&r1=1057583&r2=1057584&view=diff
==============================================================================
--- wicket/trunk/wicket-examples/src/main/java/org/apache/wicket/examples/repeater/DataGridPage.java (original)
+++ wicket/trunk/wicket-examples/src/main/java/org/apache/wicket/examples/repeater/DataGridPage.java Tue Jan 11 11:24:53 2011
@@ -16,6 +16,9 @@
  */
 package org.apache.wicket.examples.repeater;
 
+import java.util.ArrayList;
+import java.util.List;
+
 import org.apache.wicket.extensions.markup.html.repeater.data.grid.DataGridView;
 import org.apache.wicket.extensions.markup.html.repeater.data.grid.ICellPopulator;
 import org.apache.wicket.extensions.markup.html.repeater.data.grid.PropertyPopulator;
@@ -34,14 +37,14 @@ public class DataGridPage extends BasePa
 	 */
 	public DataGridPage()
 	{
-		ICellPopulator[] columns = new ICellPopulator[5];
+		List<ICellPopulator<Contact>> columns = new ArrayList<ICellPopulator<Contact>>();
 
-		columns[0] = new PropertyPopulator("id");
-		columns[1] = new PropertyPopulator("firstName");
-		columns[2] = new PropertyPopulator("lastName");
-		columns[3] = new PropertyPopulator("homePhone");
-		columns[4] = new PropertyPopulator("cellPhone");
+		columns.add(new PropertyPopulator<Contact>("id"));
+		columns.add(new PropertyPopulator<Contact>("firstName"));
+		columns.add(new PropertyPopulator<Contact>("lastName"));
+		columns.add(new PropertyPopulator<Contact>("homePhone"));
+		columns.add(new PropertyPopulator<Contact>("cellPhone"));
 
-		add(new DataGridView("rows", columns, new SortableContactDataProvider()));
+		add(new DataGridView<Contact>("rows", columns, new SortableContactDataProvider()));
 	}
 }

Modified: wicket/trunk/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/repeater/data/table/AjaxFallbackDefaultDataTable.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/repeater/data/table/AjaxFallbackDefaultDataTable.java?rev=1057584&r1=1057583&r2=1057584&view=diff
==============================================================================
--- wicket/trunk/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/repeater/data/table/AjaxFallbackDefaultDataTable.java (original)
+++ wicket/trunk/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/repeater/data/table/AjaxFallbackDefaultDataTable.java Tue Jan 11 11:24:53 2011
@@ -63,29 +63,9 @@ public class AjaxFallbackDefaultDataTabl
 	 * @param rowsPerPage
 	 *            number of rows per page
 	 */
-	@SuppressWarnings("unchecked")
 	public AjaxFallbackDefaultDataTable(String id, final List<IColumn<T>> columns,
 		ISortableDataProvider<T> dataProvider, int rowsPerPage)
 	{
-		this(id, columns.toArray((IColumn<T>[])new IColumn[columns.size()]), dataProvider,
-			rowsPerPage);
-	}
-
-	/**
-	 * Constructor
-	 * 
-	 * @param id
-	 *            component id
-	 * @param columns
-	 *            array of columns
-	 * @param dataProvider
-	 *            data provider
-	 * @param rowsPerPage
-	 *            number of rows per page
-	 */
-	public AjaxFallbackDefaultDataTable(String id, final IColumn<T>[] columns,
-		ISortableDataProvider<T> dataProvider, int rowsPerPage)
-	{
 		super(id, columns, dataProvider, rowsPerPage);
 		setOutputMarkupId(true);
 		setVersioned(false);

Modified: wicket/trunk/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/grid/AbstractDataGridView.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/grid/AbstractDataGridView.java?rev=1057584&r1=1057583&r2=1057584&view=diff
==============================================================================
--- wicket/trunk/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/grid/AbstractDataGridView.java (original)
+++ wicket/trunk/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/grid/AbstractDataGridView.java Tue Jan 11 11:24:53 2011
@@ -16,13 +16,14 @@
  */
 package org.apache.wicket.extensions.markup.html.repeater.data.grid;
 
+import java.util.List;
+
 import org.apache.wicket.WicketRuntimeException;
 import org.apache.wicket.markup.repeater.Item;
 import org.apache.wicket.markup.repeater.RefreshingView;
 import org.apache.wicket.markup.repeater.RepeatingView;
 import org.apache.wicket.markup.repeater.data.DataViewBase;
 import org.apache.wicket.markup.repeater.data.IDataProvider;
-import org.apache.wicket.markup.repeater.util.ArrayIteratorAdapter;
 import org.apache.wicket.model.IModel;
 import org.apache.wicket.model.Model;
 
@@ -45,9 +46,7 @@ public abstract class AbstractDataGridVi
 	private static final String CELL_REPEATER_ID = "cells";
 	private static final String CELL_ITEM_ID = "cell";
 
-	private final ICellPopulator<T>[] populators;
-
-	private transient ArrayIteratorAdapter<ICellPopulator<T>> populatorsIteratorCache;
+	private final List<? extends ICellPopulator<T>> populators;
 
 	/**
 	 * Constructor
@@ -59,7 +58,7 @@ public abstract class AbstractDataGridVi
 	 * @param dataProvider
 	 *            data provider
 	 */
-	public AbstractDataGridView(String id, ICellPopulator<T>[] populators,
+	public AbstractDataGridView(String id, List<? extends ICellPopulator<T>> populators,
 		IDataProvider<T> dataProvider)
 	{
 		super(id, dataProvider);
@@ -67,36 +66,7 @@ public abstract class AbstractDataGridVi
 		this.populators = populators;
 	}
 
-	/**
-	 * Returns iterator over ICellPopulator elements in the populators array. This method caches the
-	 * iterator implementation in a transient member instance.
-	 * 
-	 * @return iterator over ICellPopulator elements in the populators array
-	 */
-	private ArrayIteratorAdapter<ICellPopulator<T>> getPopulatorsIterator()
-	{
-		if (populatorsIteratorCache == null)
-		{
-			populatorsIteratorCache = new ArrayIteratorAdapter<ICellPopulator<T>>(
-				internalGetPopulators())
-			{
-
-				@Override
-				protected IModel<ICellPopulator<T>> model(ICellPopulator<T> object)
-				{
-					return new Model<ICellPopulator<T>>(object);
-				}
-
-			};
-		}
-		else
-		{
-			populatorsIteratorCache.reset();
-		}
-		return populatorsIteratorCache;
-	}
-
-	protected final ICellPopulator<T>[] internalGetPopulators()
+	protected final List<? extends ICellPopulator<T>> internalGetPopulators()
 	{
 		return populators;
 	}
@@ -175,15 +145,14 @@ public abstract class AbstractDataGridVi
 		RepeatingView cells = new RepeatingView(CELL_REPEATER_ID);
 		item.add(cells);
 
-		ArrayIteratorAdapter<ICellPopulator<T>> populators = getPopulatorsIterator();
-
-		for (int i = 0; populators.hasNext(); i++)
+		int populatorsNumber = populators.size();
+		for (int i = 0; i < populatorsNumber; i++)
 		{
-			IModel<ICellPopulator<T>> populatorModel = populators.next();
+			ICellPopulator<T> populator = populators.get(i);
+			IModel<ICellPopulator<T>> populatorModel = new Model<ICellPopulator<T>>(populator);
 			Item<ICellPopulator<T>> cellItem = newCellItem(cells.newChildId(), i, populatorModel);
 			cells.add(cellItem);
 
-			ICellPopulator<T> populator = cellItem.getModelObject();
 			populator.populateItem(cellItem, CELL_ITEM_ID, item.getModel());
 
 			if (cellItem.get("cell") == null)

Modified: wicket/trunk/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/grid/DataGridView.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/grid/DataGridView.java?rev=1057584&r1=1057583&r2=1057584&view=diff
==============================================================================
--- wicket/trunk/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/grid/DataGridView.java (original)
+++ wicket/trunk/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/grid/DataGridView.java Tue Jan 11 11:24:53 2011
@@ -45,10 +45,10 @@ import org.apache.wicket.markup.repeater
  * 
  * <pre>
  * 
- * ICellPopulator[] columns = new ICellPopulator[2];
+ * List&lt;ICellPopulator&gt; columns = new ArrayList&lt;ICellPopulator&gt;();
  * 
- * columns[0] = new PropertyPopulator(&quot;firstName&quot;);
- * columns[1] = new PropertyPopulator(&quot;lastName&quot;);
+ * columns.add(new PropertyPopulator(&quot;firstName&quot;));
+ * columns.add(new PropertyPopulator(&quot;lastName&quot;));
  * 
  * add(new DataGridView(&quot;rows&quot;, columns, new UserProvider()));
  * 
@@ -78,35 +78,18 @@ public class DataGridView<T> extends Abs
 	 * @param dataProvider
 	 *            data provider
 	 */
-	@SuppressWarnings("unchecked")
-	public DataGridView(String id, List<ICellPopulator<T>> populators, IDataProvider<T> dataProvider)
-	{
-		super(id, populators.toArray(new ICellPopulator[populators.size()]), dataProvider);
-	}
-
-	/**
-	 * Constructor
-	 * 
-	 * Notice cells are created in the same order as cell populators in the array
-	 * 
-	 * @param id
-	 *            component id
-	 * @param populators
-	 *            array of ICellPopulators used to populate cells
-	 * @param dataProvider
-	 *            data provider
-	 */
-	public DataGridView(String id, ICellPopulator<T>[] populators, IDataProvider<T> dataProvider)
+	public DataGridView(String id, List<? extends ICellPopulator<T>> populators,
+		IDataProvider<T> dataProvider)
 	{
 		super(id, populators, dataProvider);
 	}
 
 	/**
-	 * Returns the array of cell populators
+	 * Returns the list of cell populators
 	 * 
-	 * @return the array of cell populators
+	 * @return the list of cell populators
 	 */
-	public ICellPopulator<T>[] getPopulators()
+	public List<? extends ICellPopulator<T>> getPopulators()
 	{
 		return internalGetPopulators();
 	}

Modified: wicket/trunk/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/table/DataTable.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/table/DataTable.java?rev=1057584&r1=1057583&r2=1057584&view=diff
==============================================================================
--- wicket/trunk/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/table/DataTable.java (original)
+++ wicket/trunk/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/table/DataTable.java Tue Jan 11 11:24:53 2011
@@ -16,6 +16,8 @@
  */
 package org.apache.wicket.extensions.markup.html.repeater.data.table;
 
+import java.util.List;
+
 import org.apache.wicket.Component;
 import org.apache.wicket.behavior.Behavior;
 import org.apache.wicket.behavior.SimpleAttributeModifier;
@@ -52,10 +54,10 @@ import org.apache.wicket.util.string.Str
  * specified, the second column will not )
  * 
  * <pre>
- * IColumn[] columns = new IColumn[2];
+ * List&lt;IColumn&lt;T&gt;&gt; columns = new ArrayList&lt;IColumn&lt;T&gt;&gt;();
  * 
- * columns[0] = new PropertyColumn(new Model&lt;String&gt;(&quot;First Name&quot;), &quot;name.first&quot;, &quot;name.first&quot;);
- * columns[1] = new PropertyColumn(new Model&lt;String&gt;(&quot;Last Name&quot;), &quot;name.last&quot;);
+ * columns.add(new PropertyColumn(new Model&lt;String&gt;(&quot;First Name&quot;), &quot;name.first&quot;, &quot;name.first&quot;));
+ * columns.add(new PropertyColumn(new Model&lt;String&gt;(&quot;Last Name&quot;), &quot;name.last&quot;));
  * 
  * DataTable table = new DataTable(&quot;datatable&quot;, columns, new UserProvider(), 10);
  * table.addBottomToolbar(new NavigationToolbar(table));
@@ -107,7 +109,7 @@ public class DataTable<T> extends Panel 
 
 	private final WebMarkupContainer body;
 
-	private final IColumn<?>[] columns;
+	private final List<IColumn<T>> columns;
 
 	private final RepeatingView topToolbars;
 
@@ -125,11 +127,12 @@ public class DataTable<T> extends Panel 
 	 * @param rowsPerPage
 	 *            number of rows per page
 	 */
-	public DataTable(String id, IColumn<T>[] columns, IDataProvider<T> dataProvider, int rowsPerPage)
+	public DataTable(String id, List<IColumn<T>> columns, IDataProvider<T> dataProvider,
+		int rowsPerPage)
 	{
 		super(id);
 
-		if (columns == null || columns.length < 1)
+		if (columns == null || columns.size() < 1)
 		{
 			throw new IllegalArgumentException("Argument `columns` cannot be null or empty");
 		}
@@ -144,7 +147,7 @@ public class DataTable<T> extends Panel 
 			protected Item newCellItem(String id, int index, IModel model)
 			{
 				Item item = DataTable.this.newCellItem(id, index, model);
-				final IColumn<?> column = DataTable.this.columns[index];
+				final IColumn<T> column = DataTable.this.columns.get(index);
 				if (column instanceof IStyledColumn)
 				{
 					item.add(new DataTable.CssAttributeBehavior()
@@ -235,7 +238,7 @@ public class DataTable<T> extends Panel 
 	/**
 	 * @return array of column objects this table displays
 	 */
-	public final IColumn<?>[] getColumns()
+	public final List<IColumn<T>> getColumns()
 	{
 		return columns;
 	}

Modified: wicket/trunk/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/table/DefaultDataTable.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/table/DefaultDataTable.java?rev=1057584&r1=1057583&r2=1057584&view=diff
==============================================================================
--- wicket/trunk/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/table/DefaultDataTable.java (original)
+++ wicket/trunk/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/table/DefaultDataTable.java Tue Jan 11 11:24:53 2011
@@ -55,28 +55,9 @@ public class DefaultDataTable<T> extends
 	 * @param rowsPerPage
 	 *            number of rows per page
 	 */
-	@SuppressWarnings("unchecked")
 	public DefaultDataTable(String id, final List<IColumn<T>> columns,
 		ISortableDataProvider<T> dataProvider, int rowsPerPage)
 	{
-		this(id, columns.toArray(new IColumn[columns.size()]), dataProvider, rowsPerPage);
-	}
-
-	/**
-	 * Constructor
-	 * 
-	 * @param id
-	 *            component id
-	 * @param columns
-	 *            array of columns
-	 * @param dataProvider
-	 *            data provider
-	 * @param rowsPerPage
-	 *            number of rows per page
-	 */
-	public DefaultDataTable(String id, final IColumn<T>[] columns,
-		ISortableDataProvider<T> dataProvider, int rowsPerPage)
-	{
 		super(id, columns, dataProvider, rowsPerPage);
 
 		addTopToolbar(new NavigationToolbar(this));

Modified: wicket/trunk/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/table/HeadersToolbar.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/table/HeadersToolbar.java?rev=1057584&r1=1057583&r2=1057584&view=diff
==============================================================================
--- wicket/trunk/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/table/HeadersToolbar.java (original)
+++ wicket/trunk/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/table/HeadersToolbar.java Tue Jan 11 11:24:53 2011
@@ -16,6 +16,8 @@
  */
 package org.apache.wicket.extensions.markup.html.repeater.data.table;
 
+import java.util.List;
+
 import org.apache.wicket.extensions.markup.html.repeater.data.sort.ISortStateLocator;
 import org.apache.wicket.extensions.markup.html.repeater.data.sort.OrderByBorder;
 import org.apache.wicket.markup.html.WebMarkupContainer;
@@ -39,20 +41,22 @@ public class HeadersToolbar extends Abst
 	/**
 	 * Constructor
 	 * 
+	 * @param <T>
+	 *            the column data type
 	 * @param table
 	 *            data table this toolbar will be attached to
 	 * @param stateLocator
 	 *            locator for the ISortState implementation used by sortable headers
 	 */
-	public HeadersToolbar(final DataTable<?> table, final ISortStateLocator stateLocator)
+	public <T> HeadersToolbar(final DataTable<T> table, final ISortStateLocator stateLocator)
 	{
 		super(table);
 
 		RepeatingView headers = new RepeatingView("headers");
 		add(headers);
 
-		final IColumn<?>[] columns = table.getColumns();
-		for (final IColumn<?> column : columns)
+		final List<IColumn<T>> columns = table.getColumns();
+		for (final IColumn<T> column : columns)
 		{
 			AbstractItem item = new AbstractItem(headers.newChildId());
 			headers.add(item);

Modified: wicket/trunk/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/table/NavigationToolbar.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/table/NavigationToolbar.java?rev=1057584&r1=1057583&r2=1057584&view=diff
==============================================================================
--- wicket/trunk/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/table/NavigationToolbar.java (original)
+++ wicket/trunk/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/table/NavigationToolbar.java Tue Jan 11 11:24:53 2011
@@ -45,7 +45,7 @@ public class NavigationToolbar extends A
 		WebMarkupContainer span = new WebMarkupContainer("span");
 		add(span);
 		span.add(new AttributeModifier("colspan", true, new Model<String>(
-			String.valueOf(table.getColumns().length))));
+			String.valueOf(table.getColumns().size()))));
 
 		span.add(newPagingNavigator("navigator", table));
 		span.add(newNavigatorLabel("navigatorLabel", table));

Modified: wicket/trunk/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/table/NoRecordsToolbar.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/table/NoRecordsToolbar.java?rev=1057584&r1=1057583&r2=1057584&view=diff
==============================================================================
--- wicket/trunk/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/table/NoRecordsToolbar.java (original)
+++ wicket/trunk/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/table/NoRecordsToolbar.java Tue Jan 11 11:24:53 2011
@@ -66,7 +66,7 @@ public class NoRecordsToolbar extends Ab
 		add(td);
 
 		td.add(new AttributeModifier("colspan", true, new Model<String>(
-			String.valueOf(table.getColumns().length))));
+			String.valueOf(table.getColumns().size()))));
 		td.add(new Label("msg", messageModel));
 	}
 

Modified: wicket/trunk/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/table/filter/FilterToolbar.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/table/filter/FilterToolbar.java?rev=1057584&r1=1057583&r2=1057584&view=diff
==============================================================================
--- wicket/trunk/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/table/filter/FilterToolbar.java (original)
+++ wicket/trunk/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/table/filter/FilterToolbar.java Tue Jan 11 11:24:53 2011
@@ -16,6 +16,8 @@
  */
 package org.apache.wicket.extensions.markup.html.repeater.data.table.filter;
 
+import java.util.List;
+
 import org.apache.wicket.Component;
 import org.apache.wicket.extensions.markup.html.repeater.data.table.AbstractToolbar;
 import org.apache.wicket.extensions.markup.html.repeater.data.table.DataTable;
@@ -47,7 +49,7 @@ public class FilterToolbar extends Abstr
 	 *            type of filter state object
 	 * 
 	 */
-	public <T> FilterToolbar(final DataTable<?> table, final FilterForm<T> form,
+	public <T> FilterToolbar(final DataTable<T> table, final FilterForm<T> form,
 		final IFilterStateLocator<T> stateLocator)
 	{
 		super(table);
@@ -67,8 +69,8 @@ public class FilterToolbar extends Abstr
 		filters.setRenderBodyOnly(true);
 		add(filters);
 
-		IColumn<?>[] cols = table.getColumns();
-		for (IColumn<?> col : cols)
+		List<IColumn<T>> cols = table.getColumns();
+		for (IColumn<T> col : cols)
 		{
 			WebMarkupContainer item = new WebMarkupContainer(filters.newChildId());
 			item.setRenderBodyOnly(true);