On Thu, May 27, 2010 at 5:33 PM, Chris Colman
<[email protected]>wrote:

> > Wicket (just like Java) does not support multiple inheritance.  If
> you're
> > creating a base page that has two blocks that need to be filled in,
> you
> > can:
>
> I agree that wicket shouldn't support multiple inheritance but I'm not
> sure that what is required here is multiple inheritance.
>
> In the wicket parallel universe multiple inheritance would be
> represented by  one page extending from multiple base pages but that's
> not what is required here and that would indeed be a bad path to trod.
>
> What I have had the need for many times is for a base page to have
> multiple overridable 'sections' - one base page but multiple sections
> within that page that could be overridden (or not) by pages that extend
> that page. This does not represent multiple inheritance. It is the
> equivalent of Java allowing multiple overridable methods in a single
> base class. In Java classes that extend the base class can override one
> or more of the virtual (non final) methods in the base class but the
> same rule applies - any class/page can only extend a single base
> class/page.
>
> The constraint that wicket has now is that only one section of a page
> can be overridden by the 'limit of one' child/extend wicket tags. As
> only one overridable section is currently allowed in wicket there is no
> need to identify it. If wicket were to allow multiple sections in a base
> page to be overridden in derived pages then a simple identification
> scheme would be required - much like Java uses method signatures to
> identify the methods that are being overridden.
>
> Eg.,
>
> BasePage.html:
> <body>
>
>  <div id="container">
>        <wicket:section id="header">
>                <!-- markup will be used if no derived page overrides it
> --.
>                <h1>my website</h1.
>        </wicket:section>
>
>        <hr />
>
>        <wicket:section id="body">
>                <!-- a derived page should override this -->
>        </wicket;section>
>
>        <hr />
>
>        <!-- footer same for every page - no overriding -->
>        <div class="footer">
>                <p>copyright 2010 acme corp</p>
>        </div>
>
>  </div>
> </body>
>
> WelcomePage.html:
> <body>
>        <!-- happy to use base page's header so no header section
> override -->
>
>        <wicket:section id="body">
>                <h1>Welcome to my website!</h1>
>
>                My website is the best because it uses wicket!
>        </wicket:section>
> </body>
>
> Note how I've used the same tag 'section' in both base and extended
> pages to avoid the obvious issue that occurs should someone extend the
> WelcomePage.html above. Ie. When inheritance is chained over more than
> two levels. In that case it becomes very wrong to specify whether a
> section is 'overriding' (extend) or can be overridden (child). Much like
> in Java inheritance you don't specify each method as being a 'child' or
> 'extension'. Instead, the mere presence of a method with identical
> signature as in a base class indicates that that method is overriding
> the base class method. That would seem an obvious model for overridable
> markup sections in wicket also.
>
> This idea/issue has been raised a few times before in this list and once
> a remarkably small patch was even developed that would enable this to
> work.
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [email protected]
> For additional commands, e-mail: [email protected]
>
>
And how is your proposed solution any different than the solution that I
gave you (putting <div wicket:id="body">[body]</div> in your markup and
creating an abstract method that child classes must implement)?  It's
exactly the same except that now people would have to learn a new
wicket:section tag.  This doesn't make sense and it strays from Wicket's
"just java / just html" motto.  The two solutions are functionally the same
and only cosmetically different.

-- 
Jeremy Thomerson
http://www.wickettraining.com

Reply via email to