0

私の 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);        

}
}
4

1 に答える 1

0

ページネーションナビゲーターを使用してページを離れるときはいつでも、フォームを送信しないため、データを転送せず、モデルを変更せず、返送時にきれいな状態になります。これを回避する最も簡単な方法AjaxCheckboxは、通常のチェックボックスの代わりにesを使用することです。これができない場合は、フォームを送信するためにページ付けリンクを変更する必要があります。

于 2011-08-10T14:27:44.810 に答える