Hello,
Another way is to add an onclick listener to each row in the table by
overriding newRowItem(...) in DefaultDataTable like this:
DefaultDataTable table = new DefaultDataTable<LocationsEntity("datatable",
columns,
locationsProvider, 10) {
@Override
protected Item<LocationsEntity> newRowItem(String id, int index,
IModel<LocationsEntity> model) {
Item<LocationsEntity> rowItem = super.newRowItem(id, index,
model);
rowItem.add(new AjaxEventBehavior ("onclick") {
@Override
protected void onEvent(AjaxRequestTarget target) {
// pass the model object for the selected row to the
editor
editOverlay.setModelObject (model.getObject());
target.addComponent (editOverlay);
}
});
return rowItem;
}
};
Regards,
Mike
http://wicketstuff.org/wicket/repeater/?wicket:bookmarkablePage=:org.apache.wicket.examples.repeater.DataTablePage
-igor
On Thu, Jul 30, 2009 at 11:14 AM, Elad Katz<[email protected]> wrote:
Hi, I have a DefaultDataTable with 5 columns, I want to be able to register
to an onclick method that fires when the user will click a specific row\cell
in the table.
In other words, I need to be able to open an edit screen when the user
clicks the row he wants to edit, and for that I need the row to be clickable
(or just the name cell) and I need to be able to be able to hook up to that
event.
My Code:
*Please bear in mind that I've only started developing in wicket a week ago
so if you see anything that doesn't make sense, please let me know so I can
fix it.*
*WebPage.java:*
locationsEntityFacade =
LookupHelper.getInstance().lookupLocationsEntityFacade();
List locations = locationsEntityFacade.findAll();
int count = locations.size();
add(new Label("locationsCount", String.valueOf(count)));
LocationsProvider locationsProvider = new LocationsProvider();
IColumn[] columns = new IColumn[5];
columns[0] = new PropertyColumn(new Model("Name"), "name", "name");
columns[1] = new PropertyColumn(new Model("Address 1"),
"streetAddress1", "streetAddress1");
columns[2] = new PropertyColumn(new Model("Address 2"),
"streetAddress2", "streetAddress2");
columns[3] = new PropertyColumn(new Model("City"), "city", "city");
columns[4] = new PropertyColumn(new Model("State"), "usState",
"usState");
DefaultDataTable table = new DefaultDataTable("datatable", columns,
locationsProvider, 10);
add(table);
* Location Provider:*
public class LocationsProvider extends SortableDataProvider{
List list = new ArrayList();
LocationsEntityFacadeLocal locationsEntityFacade;
public LocationsProvider() {
setSort("id", true);
locationsEntityFacade =
LookupHelper.getInstance().lookupLocationsEntityFacade();
list = locationsEntityFacade.findAll();
}
public Iterator iterator(int first, int count) {
List newList = new ArrayList();
newList.addAll(list.subList(first, first + count));
final String sortColumn = this.getSort().getProperty();
final boolean ascending = this.getSort().isAscending();
Collections.sort(newList, new Comparator() {
public int compare(Object obj1, Object obj2) {
PropertyModel model1 = new PropertyModel(obj1, sortColumn);
PropertyModel model2 = new PropertyModel(obj2, sortColumn);
Object modelObject1 = model1.getObject();
Object modelObject2 = model2.getObject();
int compare = ((Comparable)
modelObject1).compareTo(modelObject2);
if (!ascending)
compare *= -1;
return compare;
}
});
return newList.iterator();
}
public int size() {
return list.size();
}
public IModel model(final Object object) {
return new CompoundPropertyModel((LocationsEntity)object);
}
*webpage.html:
*
...
<table wicket:id="datatable"></table>
...
Thanks,
Elad
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]