Hello,

This error happens because the intermediary panel between the form and the drop down choice does not have a model.

Changing the PanelSearch constructor to call super (id, new Model()) should fix the problem.

You might also want your form panel to extend FormComponentPanel instead to get better validation support.

Mike
Or you did not set the model on the dropdown.

Maurice

On Thu, Feb 21, 2008 at 8:44 PM, Maurice Marrink <[EMAIL PROTECTED]> wrote:
Looks like at least one of the models in the session is not properly
 initialized.
 You have to do something like
 private IModel model=new WhateverModel(null);
 in your session.

 Maurice



 On Thu, Feb 21, 2008 at 8:41 PM, steviezz <[EMAIL PROTECTED]> wrote:
 >
 >  Now getting
 >
 >  RequestCycle.logRuntimeException(1399) | Attempt to set model object on null
 >  model of component: panelSearch:form:parentAreas
 >  java.lang.IllegalStateException: Attempt to set model object on null model
 >  of component: panelSearch:form:parentAreas
 >         at org.apache.wicket.Component.setModelObject(Component.java:2850)
 >
 >
 >
 >
 >
 >
 >  Mr Mean wrote:
 >  >
 >  > Don't add wicket components to the session, use models.
 >  > for example
 >  > class MySession extends WebSession
 >  > {
 >  >  private IModel dropdown1=new WhateverModel(null); //etc for the others
 >  >  // add getters() for models
 >  > }
 >  >
 >  > class PanelSearch extends Panel
 >  > {
 >  >  public PanelSearch(String id)
 >  > {
 >  >  super(id);
 >  >  add(new
 >  > 
DropDownChoice("dropdown1",((MySession)Session.get()).getDropdown1(),myChoices)
 >  > }
 >  > }
 >  >
 >  > class SomePage extends WebPage
 >  > {
 >  >  public SomePage()
 >  > {
 >  >  super();
 >  >  add(new PanelSearch("search"));
 >  > }
 >  > }
 >  >
 >  > The trick is always using the shared models in your session, that is
 >  > why you don't need setters for them and you have to initialize them
 >  > properly with some default.
 >  > That way the form automatically writes the new values to your session
 >  > and you don't have to do that manually.
 >  >
 >  > How much less code can you have?
 >  >
 >  > Maurice
 >  >
 >  > On Thu, Feb 21, 2008 at 1:44 PM, steviezz <[EMAIL PROTECTED]>
 >  > wrote:
 >  >>
 >  >>  Thanks.
 >  >>
 >  >>  I have already moved to using the session for storage.  I've tried just
 >  >>  adding the complete search panel object to the session in the search
 >  >>  onsubmit() and fetching it again to add to the results page - this works
 >  >> and
 >  >>  avoids some of my page reload and history issues (but adds a few
 >  >> others),
 >  >>  but I presume its not really a good idea to store large object graphs in
 >  >> the
 >  >>  session - maybe better to just store the selected values and rebuild the
 >  >>  selection dropdowns as required.  Plus, this will probably help me iron
 >  >> out
 >  >>  my inconsistent dropdown state problems.
 >  >>
 >  >>  But I'm still searching for a magic solution that does not involve
 >  >> writing
 >  >>  too much code :-}
 >  >>
 >  >>
 >  >>
 >  >>
 >  >>
 >  >>  Mr Mean wrote:
 >  >>  >
 >  >>  > I would not recommend what you are doing here.
 >  >>  > What happens is that wicket removes the panel from the original page
 >  >>  > and attaches it to the new page, making it impossible to use the
 >  >>  > backbutton (because wicket will complain about a missing component).
 >  >>  > Also this only works if the html of the new page uses the same
 >  >>  > component id.
 >  >>  >
 >  >>  > It is better to store the selection for your dropdowns in the session
 >  >>  > (as suggested before).
 >  >>  > Then in the constructor of your PanelSearch you can check if the
 >  >>  > session contains a value for the dropdowns and if that is the case set
 >  >>  > it as the model for the dropdown. That way you don't have to pass the
 >  >>  > state to every page.
 >  >>  >
 >  >>  > Maurice
 >  >>  >
 >  >>  > On Thu, Feb 21, 2008 at 11:35 AM, steviezz <[EMAIL PROTECTED]>
 >  >>  > wrote:
 >  >>  >>
 >  >>  >>  Answering my own questions.
 >  >>  >>
 >  >>  >>  I can also pass the search panel to the results page from my form
 >  >>  >> onSubmit:
 >  >>  >>
 >  >>  >>         setResponsePage(new
 >  >>  >> SearchResults(((PanelSearch)this.getParent()),
 >  >>  >>  search));
 >  >>  >>
 >  >>  >>  Then, in the results page:
 >  >>  >>
 >  >>  >>        public SearchResults(PanelSearch searchPanel, Search search) {
 >  >>  >>                 add(searchPanel);
 >  >>  >>         }
 >  >>  >>
 >  >>  >>  Mostly seems to work OK - panel on results page retains state from
 >  >>  >> search
 >  >>  >>  page.
 >  >>  >>
 >  >>  >>  Still getting some weird behaviour with the Ajax dropdowns on page
 >  >>  >> refreshes
 >  >>  >>  - can get crazy state of North America, Canada, Kansas if I refresh
 >  >> the
 >  >>  >> page
 >  >>  >>  between selection changes (old state gets mixed in with partial new
 >  >>  >> state)
 >  >>  >>
 >  >>  >>  Other thing to sort is how to reload panel state if user goes back
 >  >> to
 >  >>  >> the
 >  >>  >>  home page (containing search panel) via a basic external navigation
 >  >> link
 >  >>  >> -
 >  >>  >>  panel will be in its initial blank state.  Perhaps I do need to look
 >  >>  >> into
 >  >>  >>  loading from the session for this.
 >  >>  >>
 >  >>  >>  But I'm starting to like Wicket - this kind of stuff takes much more
 >  >>  >> code in
 >  >>  >>  other frameworks.
 >  >>  >>
 >  >>  >>
 >  >>  >>
 >  >>  >>
 >  >>  >>  steviezz wrote:
 >  >>  >>  >
 >  >>  >>  > I am now passing the search form model to the new page in the
 >  >>  >> constructor,
 >  >>  >>  >
 >  >>  >>  >   setResponsePage(new SearchResults(search));
 >  >>  >>  >
 >  >>  >>  > Works OK - I assume this is better than going through the session.
 >  >>  >>  >
 >  >>  >>  > But I have no idea (yet) how to reinitialise the search panel Ajax
 >  >>  >>  > widgets.
 >  >>  >>  >
 >  >>  >>  >
 >  >>  >>  >
 >  >>  >>  >
 >  >>  >>  > wicket user-2 wrote:
 >  >>  >>  >>
 >  >>  >>  >> store the backing model in the session and get it from the
 >  >> session,
 >  >>  >> this
 >  >>  >>  >> will help you retain the state in all the cases
 >  >>  >>  >>
 >  >>  >>  >> Cheers
 >  >>  >>  >> Dipu
 >  >>  >>  >>
 >  >>  >>  >>
 >  >>  >>  >>
 >  >>  >>  >
 >  >>  >>  >
 >  >>  >>
 >  >>  >>  --
 >  >>  >>  View this message in context:
 >  >>  >>
 >  >> 
http://www.nabble.com/Combining-Ajax-and-non-Ajax-pages-tp15587166p15607263.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/Combining-Ajax-and-non-Ajax-pages-tp15587166p15610292.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/Combining-Ajax-and-non-Ajax-pages-tp15587166p15618707.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]



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

Reply via email to