ah, sorry.  this is the code i take it.  just not in response to my original
post (at least on nabble).


Chris Colman wrote:
> 
>> i'm not sure what i think about this yet.  can you show us the
>> exact code modifications and use cases you have coded up?
>> (boiled down to the important parts, if possible) 
> 
> Ok, here's the changed bits you requested. Only 3 Java classes need
> minor changes in the framework:
> 
> [I added the deferred init to WebPage but a more simpler approach is to
> add the auto init mechanism to Page to avoid the need for casting.
> Option: You could make the mechanism switchable via an application
> setting so that existing code and test cases work in the same way as
> they do now]
> 
> RequestCycle.java
> 
>       public final void setResponsePage(final Page page)
>       {
>               // CJC 20070329 - added to auto init WebPages to allow
>               // getVariation to work properly
>               if ( page instanceof WebPage )
>               {
>                       WebPage webPage = (WebPage)page;
>                       if ( !webPage.isInitialized() )
>                               webPage.commonInit();
>               }
>               
>               IRequestTarget target = new PageRequestTarget(page);
>               setRequestTarget(target);
>       }
> 
> WebPage.java
> 
>       // CJC 20070329 - defer commonInit till after complete
> construction
>       /** true when the page has been initialized */
>       private boolean initialized = false;
> 
>       /**
>        * Returns the initialization state. This is used by other parts
> of
>        * the framework that will automatically call commonInit on
>        * uninitialized pages
>        */
>       public boolean isInitialized()
>       {
>               return initialized;
>       }
> 
>       public void commonInit()
>       {
>               // CJC 20070329 - defer commonInit till after
>               // complete construction
>               initialized = true;
> 
>               ...
>       }
> 
>       +remove the commonInit calls from WebPage constructors
> 
> BookmarkablePageRequestTarget.java
> 
>       private final Page getPage(RequestCycle requestCycle)
>       {
>               if (page == null && pageClass != null &&
>                       !requestCycle.getRedirect())
>               {
>                       page = newPage(pageClass, requestCycle);
>                       
>                       // CJC 20070329 - added to auto init WebPages to
> allow
>                       // getVariation to work properly
>                       if ( page instanceof WebPage )
>                       {
>                               WebPage webPage = (WebPage)page;
>                               if ( !webPage.isInitialized() )
>                                       webPage.commonInit();
>                       }
>               }
>               return page;
>       }
> 
> In terms of use cases they're basically our own app plus all the wicket
> test cases. Three test cases required initialization to be performed in
> an overridden commonInit instead of the constructor to work - which is
> standard for most OO frameworks of any kind, not just UI frameworks
> (MFC::createWindow, OWL::SetupWindow) - you just don't want to be
> playing with partially constructed objects.
> 
>> also, it would be good if you could explain how this solves any
> problems
>> other than getVariation().
> 
> getVariation is the biggy at the moment for me but I'm sure as more
> users adopt wicket they'll come up with similar scenarios that highlight
> this problem. It's feasible to come up with scenarios that don't even
> involve framework features but rather, a user's own WebPage derived
> class hierarchy.
> 
> This example will cause problems doing initialization in the
> constructors:
> 
> class BasePage
> {
>       public BasePage(params)
>       {
>               addTitleComponent();
>       }
> 
>       public void addTitleComponent()
>       {
>               calls getTitle() to get text of the title and creates a
> Label
>       }
> 
>       public abstract String getTitle();
> }
> 
> class MyPage extends BasePage
> {
>       String title = null;
> 
>       public MyPage(params)
>       {
>               title = use params to lookup a particular 
>                       object in database andget its name
>       }
> 
>       // !! this gets called before the constructor has initialized
> title !!
>       public String getTitle() { return title; }
> }
> 
> I trust that's informative enough to help you guys make a good decision
> on how to deal with this but if you need anything else please let me
> know.
> 
> -------------------------------------------------------------------------
> Take Surveys. Earn Cash. Influence the Future of IT
> Join SourceForge.net's Techsay panel and you'll get the chance to share
> your
> opinions on IT & business topics through brief surveys-and earn cash
> http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV
> _______________________________________________
> Wicket-user mailing list
> Wicket-user@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/wicket-user
> 
> 

-- 
View this message in context: 
http://www.nabble.com/Lifecycle-issue-with-getVariation-tf3476789.html#a9747200
Sent from the Wicket - User mailing list archive at Nabble.com.


-------------------------------------------------------------------------
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share your
opinions on IT & business topics through brief surveys-and earn cash
http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV
_______________________________________________
Wicket-user mailing list
Wicket-user@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/wicket-user

Reply via email to