私の Wicket ページには、いくつかの TextFields と、ページ分割されたチェックボックスのリスト iplemenet と dataview およびデータ プロバイダーを含むフォームがあります。この Checkgroup の例を使用しました。
以下にソースをリストしました。問題は、ページ 1 でいくつかのアイテムを選択してからページ 2 に移動し、AjaxPagingNavigator を使用してページ 1 に戻ると、選択が失われることです。ページ 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);
}
}
わかりました-これは、以下の回答に基づいて更新されたWORKING SOLUTIONコードです。ありがとう。
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);
}
}