На моей странице Wicket у меня есть форма с парой TextFields и разбитым на страницы списком флажков, iplemenet с dataview и поставщиком данных. Я использовал этот пример Checkgroup .
Я перечислил свой источник ниже. Проблема в том, что когда я выбираю несколько элементов на странице 1, а затем перехожу на страницу 2 и затем возвращаюсь на страницу 1 с помощью AjaxPagingNavigator, выбор теряется: элементы, которые были проверены на странице 1, изначально не имеют флажка "больше. Что мне делать, чтобы элементы, выбранные на странице, не терялись, когда AjaxPagnigaion используется для обхода списка?
public final class AjaxFormWithPaginatedCheckBoxPage extends BasePage {
static Logger logger = Logger.getLogger(AjaxFormWithPaginatedCheckBoxPage.class);
private Person person = new Person();
int counter = 0;
WebMarkupContainer webMC;
static List<Person> pList=Person.getPersons(100);
int maxListCount=5;
DataView dv;
CheckGroup group;
public AjaxFormWithPaginatedCheckBoxPage() {
super();
final Form form = new Form("form", new CompoundPropertyModel(person)) {
protected void onSubmit() {
logger.info("form recived");
logger.info(" person name " + person.getName());
setResponsePage(new AjaxTogglePanelTestPage());
}
};
final TextField name = new TextField("name");
final TextField age = new TextField("age");
form.add(name);
form.add(age);
group=new CheckGroup("group", new ArrayList());
form.add(group);
webMC= new WebMarkupContainer("webMC");
webMC.setOutputMarkupId(true);
//PersonDataProvider personDataProvider= new PersonDataProvider();
SortablePersonDataProvider personDataProvider=new SortablePersonDataProvider(pList);
dv = new DataView<Person>("persons", personDataProvider) {
@Override
protected void populateItem(Item<Person> item) {
//AttributeModifier am = new AttributeModifier("src", true, item.getModel());
//item.add(new Radio("radio", item.getModel()));
item.add(new Check("check", item.getModel()));
item.add(new Label("id", new PropertyModel(item.getModel(), "id")));
item.add(new Label("name", new PropertyModel(item.getModel(), "name")));
item.add(new Label("age", new PropertyModel(item.getModel(), "age")));
}
};
dv.setItemsPerPage(maxListCount);
webMC.add(new AjaxFallbackOrderByBorder("orderByID", "id", personDataProvider)
{
@Override
protected void onSortChanged()
{
dv.setCurrentPage(0);
}
@Override
protected void onAjaxClick(AjaxRequestTarget target) {
target.addComponent(webMC);
}
});
webMC.add(new AjaxFallbackOrderByBorder("orderByName", "name", personDataProvider)
{
@Override
protected void onSortChanged()
{
dv.setCurrentPage(0);
}
@Override
protected void onAjaxClick(AjaxRequestTarget target) {
target.addComponent(webMC);
}
});
webMC.add(new AjaxFallbackOrderByBorder("orderByAge", "age", personDataProvider)
{
@Override
protected void onSortChanged()
{
dv.setCurrentPage(0);
}
@Override
protected void onAjaxClick(AjaxRequestTarget target) {
target.addComponent(webMC);
}
});
webMC.add(dv);
webMC.add(new AjaxPagingNavigator("navigator",dv));
group.add(webMC);
AjaxButton ab = new AjaxButton("ajax-button", new PropertyModel<String>(this,
"counter"), form) {
@Override
protected void onSubmit(AjaxRequestTarget target, Form<?> form) {
counter++;
logger.info("ajx form recived");
logger.info("ajx person name " + person.getName());
target.addComponent(this);
}
};
form.add(ab);
form.setDefaultButton(ab);
add(form);
}
}
Ok - это обновленный код РАБОЧЕГО РЕШЕНИЯ, основанный на ответе ниже. Спасибо.
public final class AjaxFormWithPaginatedCheckBoxPage extends BasePage {
static Logger logger = Logger.getLogger(AjaxFormWithPaginatedCheckBoxPage.class);
private Person person = new Person();
int counter = 0;
WebMarkupContainer webMC;
static List<Person> pList=Person.getPersons(100);
int maxListCount=5;
DataView dv;
Set<Person> selectedPersons= new HashSet<Person>();
public AjaxFormWithPaginatedCheckBoxPage() {
super();
final Form form = new Form("form", new CompoundPropertyModel(person)) {
protected void onSubmit() {
logger.info("form recived");
logger.info(" person name " + person.getName());
for(Person p: selectedPersons){
logger.info(" selected "+ p.getName());
}
setResponsePage(new AjaxTogglePanelTestPage());
}
};
final TextField name = new TextField("name");
final TextField age = new TextField("age");
form.add(name);
form.add(age);
//group=new CheckGroup("group", new ArrayList());
//form.add(group);
/*
group.add(new AjaxFormChoiceComponentUpdatingBehavior(){
@Override
protected void onUpdate(AjaxRequestTarget target) {
logger.info(" AjaxFormChoiceComponentUpdatingBehavior invoked .. ");
target.addComponent(webMC);
}
});
*/
webMC= new WebMarkupContainer("webMC");
webMC.setOutputMarkupId(true);
//PersonDataProvider personDataProvider= new PersonDataProvider();
SortablePersonDataProvider personDataProvider=new SortablePersonDataProvider(pList);
dv = new DataView<Person>("persons", personDataProvider) {
@Override
protected void populateItem(final Item<Person> item) {
//item.add(new Check("check", item.getModel()));
AjaxCheckBox ajc=new AjaxCheckBox("check", new PropertyModel(item.getModel(), "id")) {
@Override
protected void onUpdate(AjaxRequestTarget art) {
logger.info("onupdate called");
String value=getValue();
if(value==null){
logger.info("dunno what to do ..");
throw new IllegalArgumentException(" ajax check box returned null");
}
Person op=((Person)(item.getDefaultModelObject()));
logger.info("person "+ op.getName() +" was "+ person.isSelected() );
boolean bret= Strings.isTrue(value);
if(bret==false){
logger.info(" ... UN-selected");
//((Person)(item.getDefaultModelObject())).setSelected(false);
selectedPersons.remove(op);
}
else{
logger.info("....selected");
//((Person)(item.getDefaultModelObject())).setSelected(true);
selectedPersons.add(op);
}
}
};
item.add(ajc);
item.add(new Label("id", new PropertyModel(item.getModel(), "id") ) );
item.add(new Label("name", new PropertyModel(item.getModel(), "name")));
item.add(new Label("age", new PropertyModel(item.getModel(), "age")));
}
};
dv.setItemsPerPage(maxListCount);
webMC.add(new AjaxFallbackOrderByBorder("orderByID", "id", personDataProvider)
{
@Override
protected void onSortChanged()
{
dv.setCurrentPage(0);
}
@Override
protected void onAjaxClick(AjaxRequestTarget target) {
target.addComponent(webMC);
}
});
webMC.add(new AjaxFallbackOrderByBorder("orderByName", "name", personDataProvider)
{
@Override
protected void onSortChanged()
{
dv.setCurrentPage(0);
}
@Override
protected void onAjaxClick(AjaxRequestTarget target) {
target.addComponent(webMC);
}
});
webMC.add(new AjaxFallbackOrderByBorder("orderByAge", "age", personDataProvider)
{
@Override
protected void onSortChanged()
{
dv.setCurrentPage(0);
}
@Override
protected void onAjaxClick(AjaxRequestTarget target) {
target.addComponent(webMC);
}
});
webMC.add(dv);
webMC.add(new AjaxPagingNavigator("navigator",dv));
// group.add(webMC);
AjaxButton ab = new AjaxButton("ajax-button", new PropertyModel<String>(this,
"counter"), form) {
@Override
protected void onSubmit(AjaxRequestTarget target, Form<?> form) {
counter++;
logger.info("ajx form recived");
logger.info("ajx person name " + person.getName());
target.addComponent(this);
}
};
form.add(webMC);
form.add(ab);
form.setDefaultButton(ab);
add(form);
}
}