It is documented in ModalWindow javadoc:

If you want to use form in modal window component make sure that you put the
modal window itself
 * in another form (nesting forms is legal in Wicket) and that the form on
modal window is submitted
 * before the window get closed.

On Fri, Oct 29, 2010 at 3:59 PM, Maris Orbidans <maris.orbid...@ingg.com>wrote:

> Yes, it worked.
> Thanks a lot.
>
> I hope developers will fix the issue.
>
> Maris
>
> > -----Original Message-----
> > From: Leszek Gawron [mailto:lgaw...@apache.org]
> > Sent: 29 October 2010 14:20
> > To: users@wicket.apache.org
> > Subject: Re: Trying to submit form with id that is not in document.
> >
> > On 2010-10-29 14:06, Maris Orbidans wrote:
> > > Hi
> > >
> > > I have a modal window with a panel inside it. After I refresh the panel
> > > via ajax all buttons inside the panel stop working. Submit doesn't work
> > > and there is this message in ajax debug window:
> > >
> > > ERROR: Wicket.Ajax.Call.submitFormById: Trying to submit form with id
> > > 'categoryListForm135' that is not in document.
> > >
> > >
> > > This is relevant output from ajax debug:
> > >
> > >
> > > <?xml version="1.0"
> > > encoding="UTF-8"?><ajax-response><header-contribution
> encoding="wicket1"
> > >> <![CDATA[<head xmlns:wicket="http://wicket.apache.org";><script
> > > type="text/javascript"
> > >
> src="resources/org.apache.wicket.markup.html.WicketEventReference/wicket
> > > -event.js"></script>
> > > <script type="text/javascript"
> > >
> src="resources/org.apache.wicket.ajax.WicketAjaxReference/wicket-ajax.js
> > > "></script>
> > > <script type="text/javascript"
> > >
> src="resources/org.apache.wicket.ajax.AbstractDefaultAjaxBehavior/wicket
> > > -ajax-debug.js"></script>
> > > <script type="text/javascript"
> > > id="wicket-ajax-debug-enable"><!--/*--><![CDATA[/*><!--*/
> > > wicketAjaxDebugEnable=true;
> > > /*-->]^]^>*/</script>
> > >
> > > </head>]]></header-contribution><component id="categoryListPanel112"
> > >> <![CDATA[<div id="categoryListPanel112">
> > >
> > >      <form id="categoryListForm135" method="post"
> > >
> action="?wicket:interface=:0:buttonsPanel:packagesWindow:content:categor
> > > yListPanel:categoryListForm::IFormSubmitListener::"><div
> > >
> style="width:0px;height:0px;position:absolute;left:-100px;top:-100px;ove
> > > rflow:hidden"><input type="hidden" name="categoryListForm135_hf_0"
> > > id="categoryListForm135_hf_0" /></div>
> > >
> > >          <table class="betlim">
> > >              <tr>
> > >                  <th>Name</th>
> > >                  <th>Description</th>
> > >                  <th></th>
> > >              </tr>
> > >              <tr>
> > >                  <td>
> > >                      <span>NONE</span>
> > >                  </td>
> > >                  <td>
> > >                      <span>NO CATEGORY</span>
> > >                  </td>
> > >                  <td>
> > >                      <input type="button" value="Delete"
> > > name="categories:1:deleteBtn" id="deleteBtn136" onclick="if
> > > (!confirm('Are you sure you want to delete package category NONE ?'))
> > > {return}; null;var wcall=wicketSubmitFormById('categoryListForm135',
> > >
> '?wicket:interface=:0:buttonsPanel:packagesWindow:content:categoryListPa
> > >
> nel:categoryListForm:categories:1:deleteBtn::IActivePageBehaviorListener
> > > :0:-1&amp;wicket:ignoreIfNotActive=true', 'categories:1:deleteBtn'
> > > ,function() { }.bind(this),function() { }.bind(this), function()
> {return
> > >
> Wicket.$$(this)&amp;&amp;Wicket.$$('categoryListForm135')}.bind(this));;
> > > ; return false;"/>
> > >                  </td>
> > >
> > >
> > > ....
> > >
> > >
> > > </table>
> > >
> > >      </form>
> > >
> > > </div>]]></component><component id="feedback134"><![CDATA[<span
> > > id="feedback134">
> > >    <ul class="feedbackPanel">
> > >      <li class="feedbackPanelINFO">
> > >        <span class="feedbackPanelINFO">Package category&#039;3333&#039;
> > > added.</span>
> > >      </li>
> > >    </ul>
> > > </span>]]></component></ajax-response>
> > >
> > >
> > > As you can see there is form with id "categoryListForm135".
> > > For some reason javascript cannot find it.
> > >
> > >
> > > Panel html:
> > >
> > >
> > > <wicket:panel>
> > >
> > >      <form wicket:id="categoryListForm">
> > >
> > >          <table class="betlim">
> > >              <tr>
> > >                  <th>Name</th>
> > >                  <th>Description</th>
> > >                  <th></th>
> > >              </tr>
> > >              <tr wicket:id="categories">
> > >                  <td>
> > >                      <span wicket:id="name"></span>
> > >                  </td>
> > >                  <td>
> > >                      <span wicket:id="description"></span>
> > >                  </td>
> > >                  <td>
> > >                      <input type="button" wicket:id="deleteBtn"
> > > value="Delete"/>
> > >                  </td>
> > >              </tr>
> > >          </table>
> > >
> > >      </form>
> > >
> > > </wicket:panel>
> > >
> > > When it happens there is javascript error "form is null" in
> > > wicket-ajax.js
> > >
> > > submitFormById: function(formId, submitButton) {
> > > var form = Wicket.$(formId);
> > > if (form == null || typeof (form) == "undefined")
> > > Wicket.Log.error("Wicket.Ajax.Call.submitFormById: Trying to submit
> form
> > > with id '"+formId+"' that is not in document.");
> > > return this.submitForm(form, submitButton);
> > > },
> > >             submitForm: function(form, submitButton) {
> > > if (form.onsubmit) {    //   ERROR IS HERE
> > > if (!form.onsubmit()) return;
> > > }
> > > if (this.handleMultipart(form, submitButton)) {
> > > return true;
> > > }
> > > var body = function() {
> > > var s = Wicket.Form.serialize(form);
> > > if (submitButton != null) {
> > > s += Wicket.Form.encode(submitButton) + "=1";
> > > }
> > > return s;
> > > }
> > > return this.request.post(body);
> > >
> > >
> > > Any idea what can be wrong?
> >
> > yes ... your modal window has to be put into a form, so the panel's form
> > is nested:
> >
> > Example:
> >
> > > public class TrackerGroupsPanel extends Panel {
> > >     @SpringBean
> > >     private FleetService    fleetService;
> > >     @SpringBean
> > >     private TrackerService  trackerService;
> > >
> > >     private ModalWindow             modalWindow;
> > >     protected FeedbackPanel feedback;
> > >
> > >     public TrackerGroupsPanel( String id, final IModel<Fleet> model ) {
> > >             super( id, model );
> > >             setOutputMarkupId( true );
> > >
> > >             add( new Form<Void>( "form" ) {
> > >                     {
> > >                             add( feedback = new FeedbackPanel(
> "feedback" ) );
> > >                             feedback.setOutputMarkupId( true );
> > >
> > >                             add( modalWindow = new ModalWindow(
> "modalWindow"
> > ) );
> > >                             modalWindow.setWindowClosedCallback( new
> > WindowClosedCallback() {
> > >                                     @Override
> > >                                     public void onClose(
> AjaxRequestTarget
> > target ) {
> > >                                             target.addComponent(
> > TrackerGroupsPanel.this );
> > >                                     }
> > >                             } );
> > >
> > >                             add( new AjaxLink<Fleet>( "registerGroup",
> model )
> > {
> > >                                     @Override
> > >                                     public void onClick(
> AjaxRequestTarget
> > target ) {
> > >                                             modalWindow.setTitle( "Nowa
> grupa
> > pojazdów" );
> > >                                             modalWindow.setContent( new
> > TrackerGroupPanel( modalWindow.getContentId(), Model.of( new
> TrackerGroup(
> > >
> >       getModelObject() ) ) ) {
> > >                                                     @Override
> > >                                                     protected void
> onSave(
> > AjaxRequestTarget target ) {
> > >
> modalWindow.close( target
> > );
> > >                                                     }
> > >
> > >                                             } );
> > >                                             target.addComponent(
> feedback );
> > >                                             modalWindow.show( target );
> > >                                     }
> > >                             } );
> > [...]
> >
> >
> > then you will hit another bug if your form starts using ajax onchange
> > notifications ... but that is another tale :)
> >
> > --
> > Leszek Gawron                              http://lgawron.blogspot.com
> >
> > ---------------------------------------------------------------------
> > To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org
> > For additional commands, e-mail: users-h...@wicket.apache.org
> >
> >
> > _____________________________________________________________________
> > This e-mail has been scanned for viruses by MessageLabs.
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org
> For additional commands, e-mail: users-h...@wicket.apache.org
>
>

Reply via email to