I guess it is because Wicket caches the Markup associated with a
Component. Wicket assumes that the associated Markup does not change
once loaded, except if you change the markup file content itself,
because the cache will be cleared than. I guess I would create two
separate Panels for LoggedIn and LoggedOut and either add() the one or
the other to the container.
Juergen
On 8/2/06, Stefan Arentz <[EMAIL PROTECTED]> wrote:
> I have a simple Panel that we call the QuickLogInPanel. This is a
> panel located in a 'side bar'. When the user is not logged in the
> panel shows a simple username/password form. After logging in I want
> to show just some text and a log out button.
>
> So I did this:
>
> public class QuickLogInPanel extends Panel
> {
> public QuickLogInPanel(String string)
> {
> super(string);
>
> MySession session = (MySession) getSession();
>
> if (session.getUser() == null) {
> add(new LogInForm("logInForm", new
> CompoundPropertyModel(new LogInCommand())));
> } else {
> add(new PageLink("logOutLink", LogOutPage.class));
> }
> }
>
> public String getVariation()
> {
> MySession session = (MySession) getSession();
>
> if (session.getUser() == null) {
> return "LoggedOut";
> } else {
> return "LoggedIn";
> }
> }
>
> class LogInCommand
> {
> private String login;
>
> public String getLogin()
> {
> return login;
> }
>
> public void setLogin(String login)
> {
> this.login = login;
> }
>
> private String password;
>
> public String getPassword()
> {
> return password;
> }
>
> public void setPassword(String password)
> {
> this.password = password;
> }
> }
>
> class LogInForm extends Form
> {
> @SpringBean
> private LogInFacade logInFacade;
>
> public LogInForm(String id, IModel model)
> {
> super(id, model);
>
> add(new TextField("login"));
> add(new PasswordTextField("password"));
>
> add(new PageLink("forgotPasswordLink", ForgotPasswordPage.class));
> add(new PageLink("signUpLink", SignUpPage.class));
> }
>
> protected void onSubmit()
> {
> LogInCommand logInCommand = (LogInCommand) getModelObject();
> User user = logInFacade.login(logInCommand.getLogin(),
> logInCommand.getPassword());
> if (user != null) {
> MySession session = (MySession) getSession();
> session.setUser(user);
> setResponsePage(getApplication().getHomePage());
> }
> }
> }
> }
>
> Together with two markup files:
>
> QuickLogInPanel_LoggedIn.html
> QuickLogInPanel_LoggedOut.html
>
> But this gives all sorts of problems during logging in and out.
>
> I get the following error when the user logs in and the page is rendered
> again:
>
> WicketMessage: Unable to find component with id 'logOutLink' in
> MarkupContainer
>
> this is probably because the Panel is already instantiated; the
> constructor is not run again of course.
>
> Is there a way to 'reset' the component or to mark it 'dirty' so that
> the parent page will create it again?
>
> The Logout action shows the same kind of behaviour.
>
> I know I can fix this by putting some logic in the owning page and use
> two different kinds of panels, but I think one panel that just figures
> out what to do by itself is more elegant.
>
> S.
>
> -------------------------------------------------------------------------
> 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
> [email protected]
> https://lists.sourceforge.net/lists/listinfo/wicket-user
>
-------------------------------------------------------------------------
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
[email protected]
https://lists.sourceforge.net/lists/listinfo/wicket-user