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]


Reply via email to