Я использую версию калитки 1.4 и играю с флажками datatables и ajax:
Я могу сделать флажки в HTML. Когда я нажимаю на флажок, также вызывается метод ajax onUpdate, но он не дает правильное значение для выбранного флажка, т.е. this.getModelValue () всегда выбирает первое значение строки таблицы.
Что мне здесь не хватает?
add(getMyDynamicTable("myTable", provider, 10));
protected CustomDataTable<MyClass> getMyDynamicTable(String tableId, Provider provider, int numRows) {
final List<IColumn<MyClass>> myCloumns = new ArrayList<>();
myCloumns.add(new AbstractColumn<MyClass>(new ResourceModel(
"isSelected")) {
@Override
public void populateItem(Item<ICellPopulator<MyClass>> item,
String componentId, IModel<MyClass> rowModel) {
final MyClass myclass = rowModel.getObject();
CheckBoxPanel checkBoxPanel = new CheckBoxPanel(componentId, new PropertyModel<Boolean>(myclass, "isSelectedForRefund"));
item.add(checkBoxPanel);
}
@Override
public boolean isSortable() {
return true;
}
@Override
public String getSortProperty(){
return "isSelected";
}
});
return new CustomDataTable<MyClass>(tableId, myCloumns, provider, numRows, true);
}
class CheckBoxPanel extends Panel{
private static final String ID_CHECK = "checkBox";
private AjaxCheckBox field;
private IModel model;
public IModel getModel() {
return model;
}
public void setModel(IModel modelObject) {
this.model = modelObject;
}
public CheckBoxPanel(String id, IModel<Boolean> model) {
super(id, model);
System.out.println("clicked here "+ model.toString());
setModel(model);
field = new AjaxCheckBox(ID_CHECK, model) {
@Override
protected void onUpdate(AjaxRequestTarget target) {
target.addComponent(field);
if(this.getModelValue().equals("true")) {
System.out.println("Selected");
}
else if(this.getModelValue().equals("false")) {
System.out.println("UnSelected");
}
}
};
field.setMarkupId(id);
field.add(new SimpleAttributeModifier (ID_CHECK, id));
field.setOutputMarkupId(true);
add(field);
}
public CheckBoxPanel(String id) {
this(id, new Model());
}
}
В моем html я использовал тег datatable
<table class="dataview" cellspacing="0" wicket:id="myTable">[table]</table>