You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@wicket.apache.org by Elad Katz <el...@xtify.com> on 2009/07/30 20:14:07 UTC

Onclick method for DefaultDataTable cells

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

Re: Onclick method for DefaultDataTable cells

Posted by Michael O'Cleirigh <mi...@rivulet.ca>.
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<el...@xtify.com> 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: users-unsubscribe@wicket.apache.org
> For additional commands, e-mail: users-help@wicket.apache.org
>
>   


Re: Onclick method for DefaultDataTable cells

Posted by Igor Vaynberg <ig...@gmail.com>.
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<el...@xtify.com> 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: users-unsubscribe@wicket.apache.org
For additional commands, e-mail: users-help@wicket.apache.org