2013-02-26 2 views
0

У меня есть форма с столбцом флажка.Калитка Получение модели CheckGroup при нажатии на флажок

ArrayList<MyObject> myObjectsList = // Load from database ... 
ArrayList<MyObject> selectedObjects = new ArrayList<MyObject>(); 

Form form = new Form("my-form"); 

CheckGroup<MyObject> myObjectGroup = new CheckGroup<MyObject>("object-check-group", new AbstractReadOnlyModel() { 
    @Override 
    public Object getObject() { 
    return selectedObjects; 
    } 
}); 

WebMarkupContainer container = new WebMarkupContainer("table-container"); 

DataView dataView = new DataView("table-body", new ListDataProvider<MyObject>(myObjectsList)) { 
    public void populateItem(final Item item) { 
    final MyObject myObject = (MyObject) item.getModelObject(); 
    item.add(new Check("check-box", item.getModel())); // Checkbox for each item 
    // And a couple more columns 
    } 
}; 

container.add(dataView); 
group.add(container); 
form.add(group); 
add(form); 

Теперь то, что я хочу, чтобы обновить форму, когда количество выбранных объектов меняется:

item.add(new Check("check-box", item.getModel()).add(new AjaxEventBehavior("onclick") { 
    @Override 
    protected void onEvent(AjaxRequestTarget target) { 
    selectedObjects = (ArrayList<MyGroup>) myObjectGroup.getModelObject(); // this does not work sadly :(
    // Update form elements 
    } 
})); 

Есть простой способ добиться этого с калиткой ??

ответ

4

Добавить AjaxFormChoiceComponentUpdatingBehavior в вашу контрольную группу. Ajax будет запускаться каждый раз, когда будет проверена проверка в вашей группе.

myObjectGroup.add(new AjaxFormChoiceComponentUpdatingBehavior() 
    { 
     @Override 
     protected void onUpdate(AjaxRequestTarget target) 
     { 
      //update form elements 
     }   
    });