In my case, my ModalWindow contains a Panel. 

I have now tried passing my component WebMarkupContainer to the constructor
of the ModalWindow Panel, eg - main page code like: 


        final WebMarkupContainer listContainer = new
WebMarkupContainer("theContainer");
        ...

        final ModalWindow modalWindow = new ModalWindow("modalWindow");
        ...

        modalWindow.setContent(new MyPanel(modalWindowWindow.getContentId(),
listContainer, modalWindow, myRecord));


Then in the MyPanel, I create a Form, add submit and cancel buttons, and
then do something like: 


        private void addSaveButton(Form form, final WebMarkupContainer
listContainer, final MyRecord rec, final MySubRecord subrec) {

                AjaxFallbackButton save = new AjaxFallbackButton("savebutton", 
form) {
                                                        
                        protected void onSubmit(AjaxRequestTarget target, Form 
form) {
                              // save record code 
        
                             //try to update listContainer on main page 
                                  target.addComponent(listContainer);
                        } 
                }

                form.add(save);
        }

Similar for the cancel button

        private void addCancelButton(Form form, final WebMarkupContainer
listContainer, final ModalWindow window) {
                        
                AjaxFallbackButton cancel = new 
AjaxFallbackButton("cancelbutton", form) {
                        
                        protected void onSubmit(AjaxRequestTarget target, Form 
form) {

                                target.addComponent(listContainer);
                                window.close(target);
                        }
                };

                cancel.setDefaultFormProcessing(false);
                form.add(cancel);
        }               


Then back in the main page, I have the callbacks for the modalwindow close
buttons, eg: 


        modalWindow.setCloseButtonCallback(new 
ModalWindow.CloseButtonCallback() {
                public boolean onCloseButtonClicked(AjaxRequestTarget target) {
                        target.addComponent(listContainer);
                        return true;
                }
        });

        modalWindow.setWindowClosedCallback(new 
ModalWindow.WindowClosedCallback()
{
                public void onClose(AjaxRequestTarget target) {
                        target.addComponent(listContainer);
                }
        });


This does not work for me.  If this is meant to work, then maybe I need to
look for other errors in my code.  But I'm new to Wicket, so hard to tell if
I'm trying to do something impossible or not recommended.


Steve





Vitaly Tsaplin wrote:
> 
> It depends how you create your modal window. If it contains a page
> (iframe) then passing a component belonging to a main page to a modal
> window is not a solution. At least it did not work for me. The work
> around was to either open a modal window as a panel and pass the
> component as a constructor argrument (it works fine) or to update your
> component in WindowClosedCallback as you do :)
> 
> On Tue, Jul 29, 2008 at 8:24 PM, steviezz <[EMAIL PROTECTED]>
> wrote:
>>
>> Component I want to update is in a Panel contained in the main page.  So,
>> no
>> access to this component from the cancel button on the ModalWindow.
>>
>> Should I be passing the Panel to the ModalWindow in the constructor so I
>> can
>> access its components?
>>
>>
>> Steve
>>
>>
>>
>>
>>
>>
>> damnitjim wrote:
>>>
>>> Have you tried adding target.addComponent() call in the CancelButton
>>> submit
>>> ?
>>>
>>> On Mon, Jul 28, 2008 at 4:19 PM, steve222 <[EMAIL PROTECTED]>
>>> wrote:
>>>
>>>>
>>>> Hi. Using Wicket 1.3.4.
>>>>
>>>> I have a main page with a panel.  Page contains a form for editing a
>>>> main
>>>> record.  Panel contains a DataView containing a list of related sub
>>>> records.
>>>> In the java code for the pabel, create a ModalWindow and pop this for
>>>> adding
>>>> more sub-records.  Uses AJAX.
>>>>
>>>> Got this working OK similar to:
>>>>
>>>>
>>>> Main page code:
>>>>
>>>>
>>>>        public MainRecordEdit(PageParameters p) {
>>>>
>>>>                Integer id = p.getInt("mainRecord");
>>>>
>>>>                // uses application scope Spring bean to get record from
>>>> database
>>>>                final MyRecord myRecord =
>>>> getRecordManager().findById(id);
>>>>
>>>>                ...
>>>>                // stuff form main record CRUD on main page
>>>>                ...
>>>>
>>>>
>>>>                // add the panel for the sub records
>>>>                add(new MyListingPanel("myListingPanel", myRecord));
>>>>
>>>>        }
>>>>
>>>>
>>>>
>>>> Panel code for sub records:
>>>>
>>>>    public MyListingPanel(String id, final MyRecord myRecord) {
>>>>
>>>>        super(id);
>>>>
>>>>        Collection mySubs = myRecord.getSubRecords();
>>>>
>>>>        DataView dataView = new DataView("dataView", new
>>>> ListDataProvider(new
>>>> ArrayList(mySubs))) {
>>>>
>>>>                public void populateItem(final Item item) {
>>>>                        final MySub ms = (MyRecord)
>>>> item.getModelObject();
>>>>                        item.add(new Label("id", ms.getId()));
>>>>                        ...
>>>>                }
>>>>        };
>>>>
>>>>        final WebMarkupContainer listContainer = new
>>>> WebMarkupContainer("theContainer");
>>>>
>>>>        listContainer.setOutputMarkupId(true);
>>>>        listContainer.add(dataView);
>>>>
>>>>       ...
>>>>
>>>>       payawayWindow.setWindowClosedCallback(new
>>>> ModalWindow.WindowClosedCallback() {
>>>>                public void onClose(AjaxRequestTarget target) {
>>>>
>>>>                        // not sure what to put here to refresh the list
>>>> in
>>>> dataview
>>>>
>>>>                        target.addComponent(listContainer);
>>>>                }
>>>>        });
>>>>
>>>>
>>>>       final ModalWindow modalWindow = new ModalWindow("modalWindow");
>>>>       modalWindow.setOutputMarkupId(true);
>>>>       add(modalWindow);
>>>>
>>>>       add(new AjaxLink("modalLink") {
>>>>               public void onClick(AjaxRequestTarget target) {
>>>>                        modalWindowshow(target);
>>>>                }
>>>>        });
>>>>
>>>>
>>>> In the jave code for the Modal window - also a Panel - I do normal CRUD
>>>> stuff via AJAX with feedback going into a FeedbackPanel on the modal
>>>> window
>>>> panel when I save (or hit validation errors).  No problems here - my
>>>> AJAX
>>>> updates work OK.
>>>>
>>>> I close the popup panel using a button:
>>>>
>>>>               private void addCancelButton(Form form, final ModalWindow
>>>> window) {
>>>>
>>>>                        AjaxFallbackButton cancel = new
>>>> AjaxFallbackButton("cancelbutton", form)
>>>> {
>>>>
>>>>                                @Override
>>>>                                protected void
>>>> onSubmit(AjaxRequestTarget
>>>> target, Form form) {
>>>>
>>>>                                        // not sure if I need to do
>>>> anything
>>>> here to make the new
>>>>                                        // sub record appear on main
>>>> page
>>>> when I close this window
>>>>
>>>>                                        info("Cancel was pressed!");
>>>>                                        window.close(target);
>>>>                                }
>>>>                        };
>>>>
>>>>                        cancel.setDefaultFormProcessing(false);
>>>>                        form.add(cancel);
>>>>                }
>>>>
>>>>
>>>> Window closes.  Main page does not show new sub record in the DataView
>>>> on
>>>> the main Panel.
>>>>
>>>> Page refresh reloads the list OK.
>>>>
>>>> Thanks.
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>> --
>>>> View this message in context:
>>>> http://www.nabble.com/Modal-window---update-main-page-on-close-tp18701883p18701883.html
>>>> Sent from the Wicket - User mailing list archive at Nabble.com.
>>>>
>>>>
>>>> ---------------------------------------------------------------------
>>>> To unsubscribe, e-mail: [EMAIL PROTECTED]
>>>> For additional commands, e-mail: [EMAIL PROTECTED]
>>>>
>>>>
>>>
>>>
>>
>> --
>> View this message in context:
>> http://www.nabble.com/Modal-window---update-main-page-on-close-tp18701883p18718430.html
>> Sent from the Wicket - User mailing list archive at Nabble.com.
>>
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: [EMAIL PROTECTED]
>> For additional commands, e-mail: [EMAIL PROTECTED]
>>
>>
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
> 
> 
> 

-- 
View this message in context: 
http://www.nabble.com/Modal-window---update-main-page-on-close-tp18701883p18720893.html
Sent from the Wicket - User mailing list archive at Nabble.com.


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to