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