> public MyPanel(String id, MyModel model) {

That looks suspicious, why should MyPanel require a specific model implementation?

What's so special about your MyModel? Is it a Wicket model, i.e. implements IModel?
If yes, then the constructor should look like this:

  public MyPanel(String id, IModel<Foo> model) {

If not, the following would be my suggestion:

  public MyPanel(String id, IModel<MyModel> model) {

Hope this helps
Sven

On 05/30/2012 10:22 PM, gmparker2000 wrote:
I have a situation where I need to access the page from the load method of a
loadableDetachableModel.  The loadableDetachableModel is used deep down on a
panel that needs access to the page in order to access the model object.  To
complicate things this page is abstract and can be extended to provide
access to the model differently (i.e. from a database, or from a file).  It
kind of looks like this (only more complicated in my case):

/** Specialization of MyPage that gets the model from a database. */
public class MyRDBMSPage extends MyPage {
     public MyModel getMyModel() {
         // go get the model from the database
     }
     ....
}

/** Specialization of MyPage that gets the model from a file. */
public class MyFilePage extends MyPage {
     public MyModel getMyModel() {
         // go get the model from the filesystem
     }
     ....
}

/** Abstract MyPage that doesn't care where the model came from (database or
file). */
public abstract class MyPage extends WebPage {
     public abstract MyModel getMyModel();

     public onInitialize() {
         this.add(new MyPanel("myPanel", this.getMyModel()));
         ....
     }
}

/** Panel that has the detachable model. */
public class MyPanel {
     public MyPanel(String id, MyModel model) {
         MyDetachableModel mdl = new MyDetachableModel(model);
         this.add(new CheckBox("myCheckbox", new PropertyModel(mdl,
"isSelected"));
         ....
     }
}

/** Detachable model that needs access to the page. */
public class MyDetachableModel extends LoadableDetachableModel<MyModel>  {
         private transient MyModel myModel;

         public MyDetachableModel(MyModel model) {
             // maybe store something from the model to help me retrieve the
             // model in the load method????

             // I could store a transient reference but that is no good
beyond the initial page
             // render
             this.myModel = model;
         }

         protected MyModel load() {
                 // if I had access to the page I could get the model from
there but
                 // it doesn't appear to be available at the point when load
is called.
                 return [GET MY PAGE HERE SOMEHOW].getMyModel();
         }
}

It would be great to be able to do this so that different variations on a
single page could be created easily.  Perhaps I am overlooking something or
over complicating this.  We are also using spring so it is possible to
inject (@SpringBean) a bean into the detachable model that provides access
to the model but I'd rather avoid this as I think it complicates something
that should be quite simple.

Maybe its just me but I'm finding loadableDetachableModel to be quite
challenging for my purposes, which are not typically just loading database
entities.  Serializing a key piece of information instead of the model makes
sense and seems rather straightforward but I struggle not with the stuff
getting serialized but rather the object that is needed to operate on the
key information to get the model back (i.e a business object, entity
manager, etc).

If anyone can show me where I'm going wrong I'd appreciate the help

thanks

--
View this message in context: 
http://apache-wicket.1842946.n4.nabble.com/Access-to-Page-from-LoadableDetachableModel-tp4649586.html
Sent from the Users forum mailing list archive at Nabble.com.

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org
For additional commands, e-mail: users-h...@wicket.apache.org



---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org
For additional commands, e-mail: users-h...@wicket.apache.org

Reply via email to