You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@wicket.apache.org by Delange <de...@telfort.nl> on 2012/08/13 14:33:52 UTC
Checkbox in DataTable is not reflecting its sts in checkbox
Hi, in this program i use a datatable with selections. In the column beneath
the filtercolum i added a checkbox.
The user must select wich records the program must add to another file (at
the end)
In this example the table is shown correctly, it has a checkbox.
But whatever I do I'll never see any status change reflecting the checkbox.
(The checkbox is part of the KostenOV record that is shown)
I can'figure out what is wrong. I read a lot of articles but none could
help.
My source is:
package com.vdr.logistiek.gui.kosten.regels.opbouw;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import org.apache.wicket.AttributeModifier;
import org.apache.wicket.Component;
import
org.apache.wicket.extensions.markup.html.repeater.data.grid.ICellPopulator;
import
org.apache.wicket.extensions.markup.html.repeater.data.sort.SortOrder;
import
org.apache.wicket.extensions.markup.html.repeater.data.table.DataTable;
import
org.apache.wicket.extensions.markup.html.repeater.data.table.HeadersToolbar;
import org.apache.wicket.extensions.markup.html.repeater.data.table.IColumn;
import
org.apache.wicket.extensions.markup.html.repeater.data.table.NavigationToolbar;
import
org.apache.wicket.extensions.markup.html.repeater.data.table.PropertyColumn;
import
org.apache.wicket.extensions.markup.html.repeater.data.table.filter.FilterForm;
import
org.apache.wicket.extensions.markup.html.repeater.data.table.filter.FilterToolbar;
import
org.apache.wicket.extensions.markup.html.repeater.data.table.filter.FilteredAbstractColumn;
import
org.apache.wicket.extensions.markup.html.repeater.data.table.filter.GoAndClearFilter;
import
org.apache.wicket.extensions.markup.html.repeater.data.table.filter.IFilterStateLocator;
import
org.apache.wicket.extensions.markup.html.repeater.util.SortableDataProvider;
import org.apache.wicket.markup.html.WebPage;
import org.apache.wicket.markup.html.form.Button;
import org.apache.wicket.markup.html.form.CheckBox;
import org.apache.wicket.markup.html.form.Form;
import org.apache.wicket.markup.html.panel.FeedbackPanel;
import org.apache.wicket.markup.html.panel.Panel;
import org.apache.wicket.markup.repeater.Item;
import org.apache.wicket.model.CompoundPropertyModel;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.LoadableDetachableModel;
import org.apache.wicket.model.Model;
import org.apache.wicket.model.ResourceModel;
import org.apache.wicket.request.mapper.parameter.PageParameters;
import org.apache.wicket.spring.injection.annot.SpringBean;
import com.vdr.logistiek.bo.view.KostenOV;
import com.vdr.logistiek.gui.kosten.header.HeaderPage;
import com.vdr.logistiek.gui.kosten.overzicht.KostenfacturenOverzichtPage;
import com.vdr.logistiek.gui.template.MyFilterColumn;
import com.vdr.logistiek.service.KostenService;
import com.vdr.logistiek.service.view.KostenOVService;
public class RegelPage extends WebPage{
private RegelInput input;
private List<KostenOV> kostenOVList = new ArrayList<KostenOV>();
@SpringBean(name = "kostenService") private KostenService kostenService;
@SpringBean(name = "kostenOVService") private KostenOVService
kostenOVService;
public RegelPage(){
input = new RegelInput();
setDefaultModel(new CompoundPropertyModel<RegelInput>(input));
KostenOVProvider kostenOVProvider = new KostenOVProvider();
FilterForm form = new FilterForm("inputForm", kostenOVProvider);
add(form);
addTable(form, kostenOVProvider);
form.add(getSaveButton());
form.add(getCancelButton());
form.add(new FeedbackPanel("feedback"));
}
private Form getForm(){
Form form = new Form("inputForm"){
private static final long serialVersionUID = 1L;
protected void onSubmit() {
info("the form was submitted!");
}
};
return form;
}
private Button getSaveButton(){
Button saveButton = new Button("saveButton"){
public void onSubmit(){
System.out.println("savebutton clicked");
// PageParameters parameters = new PageParameters();
// setResponsePage(OverzichtPage.class,parameters);d
for (KostenOV kostenOV:kostenOVList){
System.out.println(kostenOV.isSelect());
}
}
};
return saveButton;
}
/**
*
* @return
*/
private Button getCancelButton(){
Button cancelButton = new Button("cancelButton"){
@Override
public void onSubmit(){
setResponsePage(KostenfacturenOverzichtPage.class);
}
};
cancelButton.setDefaultFormProcessing(false);
return cancelButton;
}
@SuppressWarnings({ "rawtypes" })
class KostenOVProvider extends SortableDataProvider<KostenOV> implements
IFilterStateLocator, Serializable {
private KostenOV kostenSelectie = new KostenOV();
public KostenOVProvider() {
setSort("vm.partijnummer", SortOrder.ASCENDING);
}
@Override
public Iterator<KostenOV> iterator(int first, int count) {
kostenOVList = kostenOVService.findAll(first, count, kostenSelectie,
getSort());
return kostenOVList.iterator();
}
@Override
public int size() {
return kostenOVService.countFindAll(kostenSelectie);
}
@Override
public IModel<KostenOV> model(KostenOV kostenSelectie) {
return new DetachableKostenOVModel(kostenSelectie);
}
@Override
public Object getFilterState() {
return kostenSelectie;
}
@Override
public void setFilterState(Object kostenSelectie) {
this.kostenSelectie = (KostenOV) kostenSelectie;
}
}
class DetachableKostenOVModel extends LoadableDetachableModel<KostenOV> {
// @SuppressWarnings("unused")
// private List<Magazijn> magazijnList ;
private KostenOV kosten;
public DetachableKostenOVModel(KostenOV c) {
//this(c.getId());
this.kosten = c;
System.out.println("select in model="+kosten.isSelect());
}
public DetachableKostenOVModel(long id) {
if (id == 0) {
throw new IllegalArgumentException();
}
}
protected KostenOV load() {
return kosten;
}
}
@SuppressWarnings({ "unchecked", "rawtypes" })
private void addTable(FilterForm form, KostenOVProvider kostenOVProvider) {
MyFilterColumn myFilterColumn = new MyFilterColumn();
List<IColumn<?>> columns = new ArrayList<IColumn<?>>();
columns.add(addActionsColumn());
columns.add(myFilterColumn.getString ("Trans." , "vm.transportkode" ,
"transportkode",4));
columns.add(myFilterColumn.getInteger("Partij" , "vm.partijnummer" ,
"partijnummer",6));// gui, dbo, getset
columns.add(myFilterColumn.getInteger("vlg" , "vm.partijvolgnr" ,
"partijvolgnr",3));
columns.add(myFilterColumn.getInteger("Order" , "vm.ordernummer" ,
"ordernummer",6));
columns.add(myFilterColumn.getInteger("vlg" , "vm.ordervolgnummer" ,
"ordervolgnummer",3));
columns.add(myFilterColumn.getString ("Mag" , "vm.eindlokatie" ,
"eindlokatie",5));
columns.add(myFilterColumn.getString ("Artikel" , "vm.artikelkode" ,
"artikelkode",7));
columns.add(myFilterColumn.getString ("Zoekveld", "vm.zoekveld" ,
"zoekveldArtikel",8));
columns.add(myFilterColumn.getInteger("Aantal" , "vm.aantal" ,
"aantal",6));
columns.add(myFilterColumn.getInteger("Transp" , "vm.transporteur" ,
"transporteur",6));
columns.add(myFilterColumn.getString ("Naam" , "r.naam" ,
"naamTransporteur",10));
columns.add(myFilterColumn.getString ("Mutcde" , "vm.mutatiekode" ,
"mutatiekode",5));
DataTable table = new DataTable("datatable", columns, kostenOVProvider,
10){
protected Item newRowItem(String id, int index, IModel model) {
Item item = super.newRowItem(id, index, model);
item.add(new AttributeModifier("class", new Model(
index % 2 == 0 ? "even" : "odd")));
return item;
}
};
FilterToolbar filterToolbar = new FilterToolbar(table, form,
kostenOVProvider);
table.addTopToolbar(new HeadersToolbar(table, kostenOVProvider));
table.addTopToolbar(filterToolbar);
table.addBottomToolbar(new NavigationToolbar(table));
form.add(table);
}
private FilteredAbstractColumn<KostenOV> addActionsColumn() {
return new FilteredAbstractColumn<KostenOV>(
new ResourceModel( getString("Actie"))) {
@Override
public Component getFilter(String componentId, FilterForm<?> form) {
return new GoAndClearFilter(componentId, form,
new ResourceModel("filter"), new ResourceModel("clear"));
}
@Override
public void populateItem(Item<ICellPopulator<KostenOV>>
cellItem,String componentId, IModel<KostenOV> rowModel) {
cellItem.add(new UserActionsPanel(componentId, rowModel,cellItem));
;
}
};
}
private static class UserActionsPanel extends Panel {
public UserActionsPanel(String id, IModel<KostenOV> kostenModel,Item item)
{
super(id);
//addEditButton(kostenModel);
add(new CheckBox("select", item.getModel()));
}
private void addEditButton(final IModel<KostenOV> kostenModel) {
Button editButton = new Button("editButton"){
public void onSubmit(){
KostenOV kostenOV = kostenModel.getObject();
PageParameters parameters = new PageParameters();
//parameters.add("id", kostenOV.getKostenId() );
setResponsePage(HeaderPage.class,parameters);
}
};
add(editButton);
}
}
}
--
View this message in context: http://apache-wicket.1842946.n4.nabble.com/Checkbox-in-DataTable-is-not-reflecting-its-sts-in-checkbox-tp4651174.html
Sent from the Users forum mailing list archive at Nabble.com.
---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
For additional commands, e-mail: users-help@wicket.apache.org
Re: Checkbox in DataTable is not reflecting its sts in checkbox
Posted by Bertrand Guay-Paquet <be...@step.polymtl.ca>.
You have 2 choices:
1) put the boolean as a property of your KostenOV and reference it with
a model (e.g. propertyModel)
2) Use a CheckGroup and multiple checkboxes which use the id of KostenOV
as their value. Have a look at:
-http://www.wicket-library.com/wicket-examples/compref/wicket/bookmarkable/org.apache.wicket.examples.compref.CheckGroupPage
-http://www.wicket-library.com/wicket-examples/compref/wicket/bookmarkable/org.apache.wicket.examples.compref.CheckGroupPage
I would probably go for option 2.
On 14/08/2012 7:09 AM, Delange wrote:
> I agree, but how should the code be? At the end it has to be placed in the
> model.
> Do you have any suggestion?
>
>
>
>
>
> --
> View this message in context: http://apache-wicket.1842946.n4.nabble.com/Checkbox-in-DataTable-is-not-reflecting-its-sts-in-checkbox-tp4651174p4651225.html
> Sent from the Users forum mailing list archive at Nabble.com.
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
> For additional commands, e-mail: users-help@wicket.apache.org
>
---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
For additional commands, e-mail: users-help@wicket.apache.org
Re: Checkbox in DataTable is not reflecting its sts in checkbox
Posted by Delange <de...@telfort.nl>.
I agree, but how should the code be? At the end it has to be placed in the
model.
Do you have any suggestion?
--
View this message in context: http://apache-wicket.1842946.n4.nabble.com/Checkbox-in-DataTable-is-not-reflecting-its-sts-in-checkbox-tp4651174p4651225.html
Sent from the Users forum mailing list archive at Nabble.com.
---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
For additional commands, e-mail: users-help@wicket.apache.org
Re: Checkbox in DataTable is not reflecting its sts in checkbox
Posted by Bertrand Guay-Paquet <be...@step.polymtl.ca>.
Hi,
In the constructor of UserActionsPanel, the checkbox is created like so:
add(new CheckBox("select", item.getModel()));
However, I think item.getModel() returns an
IModel<ICellPopulator<KostenOV>> type. This can't work in a CheckBox
which requires a Boolean model.
On 13/08/2012 8:33 AM, Delange wrote:
> Hi, in this program i use a datatable with selections. In the column beneath
> the filtercolum i added a checkbox.
> The user must select wich records the program must add to another file (at
> the end)
>
> In this example the table is shown correctly, it has a checkbox.
> But whatever I do I'll never see any status change reflecting the checkbox.
>
> (The checkbox is part of the KostenOV record that is shown)
>
> I can'figure out what is wrong. I read a lot of articles but none could
> help.
>
> My source is:
>
>
>
> package com.vdr.logistiek.gui.kosten.regels.opbouw;
>
> import java.io.Serializable;
> import java.util.ArrayList;
> import java.util.Iterator;
> import java.util.List;
>
> import org.apache.wicket.AttributeModifier;
> import org.apache.wicket.Component;
> import
> org.apache.wicket.extensions.markup.html.repeater.data.grid.ICellPopulator;
> import
> org.apache.wicket.extensions.markup.html.repeater.data.sort.SortOrder;
> import
> org.apache.wicket.extensions.markup.html.repeater.data.table.DataTable;
> import
> org.apache.wicket.extensions.markup.html.repeater.data.table.HeadersToolbar;
> import org.apache.wicket.extensions.markup.html.repeater.data.table.IColumn;
> import
> org.apache.wicket.extensions.markup.html.repeater.data.table.NavigationToolbar;
> import
> org.apache.wicket.extensions.markup.html.repeater.data.table.PropertyColumn;
> import
> org.apache.wicket.extensions.markup.html.repeater.data.table.filter.FilterForm;
> import
> org.apache.wicket.extensions.markup.html.repeater.data.table.filter.FilterToolbar;
> import
> org.apache.wicket.extensions.markup.html.repeater.data.table.filter.FilteredAbstractColumn;
> import
> org.apache.wicket.extensions.markup.html.repeater.data.table.filter.GoAndClearFilter;
> import
> org.apache.wicket.extensions.markup.html.repeater.data.table.filter.IFilterStateLocator;
> import
> org.apache.wicket.extensions.markup.html.repeater.util.SortableDataProvider;
> import org.apache.wicket.markup.html.WebPage;
> import org.apache.wicket.markup.html.form.Button;
> import org.apache.wicket.markup.html.form.CheckBox;
> import org.apache.wicket.markup.html.form.Form;
> import org.apache.wicket.markup.html.panel.FeedbackPanel;
> import org.apache.wicket.markup.html.panel.Panel;
> import org.apache.wicket.markup.repeater.Item;
> import org.apache.wicket.model.CompoundPropertyModel;
> import org.apache.wicket.model.IModel;
> import org.apache.wicket.model.LoadableDetachableModel;
> import org.apache.wicket.model.Model;
> import org.apache.wicket.model.ResourceModel;
> import org.apache.wicket.request.mapper.parameter.PageParameters;
> import org.apache.wicket.spring.injection.annot.SpringBean;
>
> import com.vdr.logistiek.bo.view.KostenOV;
> import com.vdr.logistiek.gui.kosten.header.HeaderPage;
> import com.vdr.logistiek.gui.kosten.overzicht.KostenfacturenOverzichtPage;
> import com.vdr.logistiek.gui.template.MyFilterColumn;
> import com.vdr.logistiek.service.KostenService;
> import com.vdr.logistiek.service.view.KostenOVService;
>
>
> public class RegelPage extends WebPage{
> private RegelInput input;
> private List<KostenOV> kostenOVList = new ArrayList<KostenOV>();
>
> @SpringBean(name = "kostenService") private KostenService kostenService;
> @SpringBean(name = "kostenOVService") private KostenOVService
> kostenOVService;
>
> public RegelPage(){
> input = new RegelInput();
> setDefaultModel(new CompoundPropertyModel<RegelInput>(input));
> KostenOVProvider kostenOVProvider = new KostenOVProvider();
> FilterForm form = new FilterForm("inputForm", kostenOVProvider);
>
> add(form);
>
> addTable(form, kostenOVProvider);
>
> form.add(getSaveButton());
> form.add(getCancelButton());
> form.add(new FeedbackPanel("feedback"));
> }
>
> private Form getForm(){
> Form form = new Form("inputForm"){
> private static final long serialVersionUID = 1L;
> protected void onSubmit() {
> info("the form was submitted!");
>
> }
> };
> return form;
> }
>
> private Button getSaveButton(){
> Button saveButton = new Button("saveButton"){
> public void onSubmit(){
> System.out.println("savebutton clicked");
> // PageParameters parameters = new PageParameters();
> // setResponsePage(OverzichtPage.class,parameters);d
> for (KostenOV kostenOV:kostenOVList){
> System.out.println(kostenOV.isSelect());
> }
> }
> };
> return saveButton;
> }
>
> /**
> *
> * @return
> */
> private Button getCancelButton(){
> Button cancelButton = new Button("cancelButton"){
> @Override
> public void onSubmit(){
> setResponsePage(KostenfacturenOverzichtPage.class);
> }
> };
> cancelButton.setDefaultFormProcessing(false);
> return cancelButton;
> }
>
> @SuppressWarnings({ "rawtypes" })
> class KostenOVProvider extends SortableDataProvider<KostenOV> implements
> IFilterStateLocator, Serializable {
> private KostenOV kostenSelectie = new KostenOV();
>
> public KostenOVProvider() {
> setSort("vm.partijnummer", SortOrder.ASCENDING);
> }
>
> @Override
> public Iterator<KostenOV> iterator(int first, int count) {
> kostenOVList = kostenOVService.findAll(first, count, kostenSelectie,
> getSort());
> return kostenOVList.iterator();
> }
>
> @Override
> public int size() {
> return kostenOVService.countFindAll(kostenSelectie);
> }
>
> @Override
> public IModel<KostenOV> model(KostenOV kostenSelectie) {
> return new DetachableKostenOVModel(kostenSelectie);
> }
>
> @Override
> public Object getFilterState() {
> return kostenSelectie;
> }
>
> @Override
> public void setFilterState(Object kostenSelectie) {
> this.kostenSelectie = (KostenOV) kostenSelectie;
> }
> }
>
> class DetachableKostenOVModel extends LoadableDetachableModel<KostenOV> {
> // @SuppressWarnings("unused")
> // private List<Magazijn> magazijnList ;
> private KostenOV kosten;
>
> public DetachableKostenOVModel(KostenOV c) {
> //this(c.getId());
> this.kosten = c;
> System.out.println("select in model="+kosten.isSelect());
> }
>
> public DetachableKostenOVModel(long id) {
> if (id == 0) {
> throw new IllegalArgumentException();
> }
> }
>
> protected KostenOV load() {
> return kosten;
> }
> }
>
> @SuppressWarnings({ "unchecked", "rawtypes" })
> private void addTable(FilterForm form, KostenOVProvider kostenOVProvider) {
> MyFilterColumn myFilterColumn = new MyFilterColumn();
> List<IColumn<?>> columns = new ArrayList<IColumn<?>>();
>
> columns.add(addActionsColumn());
>
> columns.add(myFilterColumn.getString ("Trans." , "vm.transportkode" ,
> "transportkode",4));
> columns.add(myFilterColumn.getInteger("Partij" , "vm.partijnummer" ,
> "partijnummer",6));// gui, dbo, getset
> columns.add(myFilterColumn.getInteger("vlg" , "vm.partijvolgnr" ,
> "partijvolgnr",3));
> columns.add(myFilterColumn.getInteger("Order" , "vm.ordernummer" ,
> "ordernummer",6));
> columns.add(myFilterColumn.getInteger("vlg" , "vm.ordervolgnummer" ,
> "ordervolgnummer",3));
> columns.add(myFilterColumn.getString ("Mag" , "vm.eindlokatie" ,
> "eindlokatie",5));
> columns.add(myFilterColumn.getString ("Artikel" , "vm.artikelkode" ,
> "artikelkode",7));
> columns.add(myFilterColumn.getString ("Zoekveld", "vm.zoekveld" ,
> "zoekveldArtikel",8));
> columns.add(myFilterColumn.getInteger("Aantal" , "vm.aantal" ,
> "aantal",6));
> columns.add(myFilterColumn.getInteger("Transp" , "vm.transporteur" ,
> "transporteur",6));
> columns.add(myFilterColumn.getString ("Naam" , "r.naam" ,
> "naamTransporteur",10));
> columns.add(myFilterColumn.getString ("Mutcde" , "vm.mutatiekode" ,
> "mutatiekode",5));
>
> DataTable table = new DataTable("datatable", columns, kostenOVProvider,
> 10){
> protected Item newRowItem(String id, int index, IModel model) {
> Item item = super.newRowItem(id, index, model);
> item.add(new AttributeModifier("class", new Model(
> index % 2 == 0 ? "even" : "odd")));
> return item;
> }
> };
> FilterToolbar filterToolbar = new FilterToolbar(table, form,
> kostenOVProvider);
> table.addTopToolbar(new HeadersToolbar(table, kostenOVProvider));
> table.addTopToolbar(filterToolbar);
> table.addBottomToolbar(new NavigationToolbar(table));
> form.add(table);
> }
> private FilteredAbstractColumn<KostenOV> addActionsColumn() {
> return new FilteredAbstractColumn<KostenOV>(
> new ResourceModel( getString("Actie"))) {
>
> @Override
> public Component getFilter(String componentId, FilterForm<?> form) {
> return new GoAndClearFilter(componentId, form,
> new ResourceModel("filter"), new ResourceModel("clear"));
> }
>
> @Override
> public void populateItem(Item<ICellPopulator<KostenOV>>
> cellItem,String componentId, IModel<KostenOV> rowModel) {
> cellItem.add(new UserActionsPanel(componentId, rowModel,cellItem));
> ;
> }
> };
> }
> private static class UserActionsPanel extends Panel {
> public UserActionsPanel(String id, IModel<KostenOV> kostenModel,Item item)
> {
> super(id);
> //addEditButton(kostenModel);
>
> add(new CheckBox("select", item.getModel()));
> }
>
> private void addEditButton(final IModel<KostenOV> kostenModel) {
> Button editButton = new Button("editButton"){
> public void onSubmit(){
>
> KostenOV kostenOV = kostenModel.getObject();
> PageParameters parameters = new PageParameters();
> //parameters.add("id", kostenOV.getKostenId() );
> setResponsePage(HeaderPage.class,parameters);
> }
> };
> add(editButton);
> }
> }
> }
>
>
>
>
> --
> View this message in context: http://apache-wicket.1842946.n4.nabble.com/Checkbox-in-DataTable-is-not-reflecting-its-sts-in-checkbox-tp4651174.html
> Sent from the Users forum mailing list archive at Nabble.com.
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
> For additional commands, e-mail: users-help@wicket.apache.org
>
---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
For additional commands, e-mail: users-help@wicket.apache.org