Another option is to add both panels, and have each override isVisible().
This makes the Login and CurrentProfile panels smarter, and keeps their
logic more encapsulated (allowing these panels to be used elsewhere without
having to copy-paste the logic about being signed in).

i.e:

// remove your if statement, and replace with this:
add(new Login("login"));
add(new CurrentProfile("profile"));

in Login.java:

class Login {

// your other code

    public boolean isVisible() {
        return BaseSession.get().getLoggedInUser() == null;
    }
}

in CurrentProfile.java:

class CurrentProfile {

// your other code

    public boolean isVisible() {
        return BaseSession.get().getLoggedInUser() != null;
    }
}

Hope this helps.

On Sat, Apr 19, 2008 at 6:47 PM, Martin Grigorov <[EMAIL PROTECTED]>
wrote:

> Probably you should move this code in onBeforeRender() (and use
> addOrReplace().
> This way every time you'll have the right panel.
>
> On Sat, 2008-04-19 at 07:28 -0700, Doug Donohoe wrote:
> > I have a page which displays a [login box] (if not logged in) or an info
> box
> > [user name|logout link] if logged in.
> >
> > I implemented this as follows:
> >
> >         User user = BaseSession.get().getLoggedInUser();
> >         if (user == null)
> >         {
> >             add(new Login("login"));
> >         }
> >         else
> >         {
> >             add(new CurrentProfile("login"));
> >         }
> >
> > Both Login and CurrentProfile are subclasses of "Panel".  When the login
> > form is submitted or the logout link is submitted, in order to get the
> page
> > to re-render, I had to use this code:
> >
> >         setResponsePage(getPage().getClass()); // need to use "class" so
> > page is re-rendered
> >
> > As a new wicket user, I'd like a clarification on why this is necessary.
>  If
> > I used this code:
> >
> >        setResponsePage(getPage());
> >
> > ... which appears to be the default behavior if setResponsePage() isn't
> > called ... then the page is simply displayed without re-rendering (e.g.,
> > after login, the login box is still shown).  So, my question is what's
> the
> > difference between the two?  Is there a way to mark a page as "needing
> > re-rendering"?  Is my solution the "correct" way in Wicket?
> >
> > This also raises the question about how many pages are stored in the
> page
> > map.  For example, if I were to login and logout 10 times in a row ...
> would
> > there be 20 pages in the page map?  Is there a way to clear out the page
> map
> > for a page?
> >
> > In my case, I invalidate the session on logout, so the above case isn't
> an
> > issue in this exact case.  I'm more concerned about someone who
> navigates my
> > site and visits hundreds of pages.  How do I keep the session from
> filling
> > up with old pages?
> >
> > Finally, is there a best practice to debug/monitor session size and page
> map
> > size?
> >
> > Thanks,
> >
> > -Doug
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
>
>

Reply via email to