when you do this:
CSSession session = (CSSession) getSession();
session.setUser(loggedInUser);
then that method:
CSSession.setUser(User)
{
this.user = user;
dirty(); <<< You have to do this here!
}
if you alter your session data you have to call dirty
Then you session wil be stored.
johan
On 6/14/07, *verbal evasion* <[EMAIL PROTECTED]
<mailto:[EMAIL PROTECTED]>> wrote:
yeah i got it to work. it wasnt the code, it was some maven
weirdness that was going on. i have a few more questions.
currently, when i login, my authentication mechanism tells me that
i have successfully logged in, but it seems like the session
information is not stored?? i have a print in my isVisible checks
and it always says that the user variable is null. i may be
returning the incorrect ResponsePage?
// in constructor
WebMarkupContainer loggedOut = new WebMarkupContainer("loggedOut") {
public boolean isVisible() {
boolean rv;
rv = ((CSSession) getSession()).getUser() == null;
System.out.println("loggedOut - isVisible? " + rv);
return rv;
}
};
...
WebMarkupContainer loggedIn = new
WebMarkupContainer("loggedIn") {
public boolean isVisible() {
boolean rv;
rv = ((CSSession) getSession()).getUser() != null;
System.out.println("loggedIn - isVisible? " +
rv);
return rv;
}
};
// In submit form
public void onSubmit() {
String userId = getUserId();
String password = getPassword();
User loggedInUser = null;
try {
loggedInUser = UserImpl.authenticate(userId,
password);
// Components can access the Session through
getSession()
CSSession session = (CSSession) getSession();
session.setUser(loggedInUser);
System.out.println("Logged in as " + userId);
logger.debug("Logged in as " + userId);
//session.get().info("Logged in as " + userId);
//Index indexPage = new Index(userId, BasePage.this);
//setResponsePage(indexPage);
setResponsePage(new Index());
} catch (AuthenticationException ae) {
String errMsg = getLocalizer().getString(
"login.errors.invalidCredentials ", this);
// Register this message with the form component.
error(errMsg);
}
}
when i keep logging in, it'll say the following:
20:06:14,806 INFO [STDOUT] loggedOut - isVisible? true
20:06:14,806 INFO [STDOUT] loggedIn - isVisible? false
20:06:14,810 INFO [STDOUT] loggedOut - isVisible? true
20:06:14,810 INFO [STDOUT] loggedOut - isVisible? true
20:06:14,811 INFO [STDOUT] loggedOut - isVisible? true
20:06:14,811 INFO [STDOUT] loggedIn - isVisible? false
20:06:14,813 INFO [STDOUT] loggedIn - isVisible? false
20:06:14,814 INFO [STDOUT] loggedOut - isVisible? true
20:06:14,814 INFO [STDOUT] loggedOut - isVisible? true
20:06:14,815 INFO [STDOUT] loggedOut - isVisible? true
20:06:14,815 INFO [STDOUT] loggedOut - isVisible? true
20:06:14,816 INFO [STDOUT] loggedIn - isVisible? false
this is for *one* successful login attempt. why is the constructor
run so many times? also, the output is wrong. what should i be
returning as the setResponsePage from the onSubmit?
thanks,
verbal
On 6/13/07, *Igor Vaynberg* < [EMAIL PROTECTED]
<mailto:[EMAIL PROTECTED]>> wrote:
the form is added to loggedout container, also notice that the
form tag is inside a div wicket:id="loggedout" so it matches
the java hierarchy.
-igor
On 6/13/07, * verbal evasion* < [send email to
[EMAIL PROTECTED] via gmail] [EMAIL PROTECTED]
<mailto:[EMAIL PROTECTED]>> wrote:
i tried implementing what you had put and i am stuck
because "loggedin" and "form" are both in the highest
scope of the websitem but in the java code, you have the
"form" added to the "loggedin" WeMarkupContainer. that
doesnt seem to fly with wicket unless i'm doing something
wrong. i tried to take out the html for the login form,
but that just doesnt make sense because there will be no
corresponding html to describe what should be in the
webcontainer.
this is my code snippet. thanks in advance.
/*
* loggedOut - username and password
*/
WebMarkupContainer loggedOut = new
WebMarkupContainer("loggedOut") {
public boolean isVisible() {
return ((CSSession)
getSession()).getUser() == null;
}
};
TextField userIdField = new TextField("userId",
new PropertyModel(this, "userId"));
PasswordTextField passField = new
PasswordTextField("password",
new PropertyModel(this, "password"));
Form form = new LoginForm("loginForm");
add(loggedOut);
loggedOut.add(form);
form.add(userIdField);
form.add(passField);
/*
* loggedIn - username
*/
WebMarkupContainer loggedIn = new
WebMarkupContainer("loggedIn") {
public boolean isVisible() {
return ((CSSession)
getSession()).getUser() != null;
}
};
Label userLabel = new Label("userLabel",
new PropertyModel(this, "userId"));
add(loggedIn);
loggedIn.add(userLabel);
...
<div wicket:id="loggedIn">
<span wicket:id="userLabel"></span>
</div>
<div wicket:id="loggedOut">
<form wicket:id="loginForm">
User Name <input type="text"
wicket:id="userId"/><br/>
Password <input type="password"
wicket:id="password"/><br/>
<input type="submit" value="Login"/>
</form>
</div>
On 6/12/07, * Eelco Hillenius * < [send email to
[EMAIL PROTECTED] via gmail]
[EMAIL PROTECTED]
<mailto:[EMAIL PROTECTED]>> wrote:
> <html>
> <body>
> <div wicket:id="loggedin"><span
wicket:id="username"></div>
> <div wicket:id="loggedout"><form
> wicket:id="form">...</form></div>
> ...
>
> MyPage() {
> add(new WebMarkupContainer("loggedin", new
> PropertyModel(this,"session.user.username")) {
> public boolean isvisible() { return
> ((MySession)getSession()).getUser()!=null; }
> }
>
> WebMarkupContainer loggedout=new
WebMarkupContainer("loggedout") {
> public boolean isvisible() { return
> ((MySession)getSession()).getUser()==null; }
> }
> add(loggedout);
> loggedout.add(new Form("form")....
That's the first option. The advantage is that it is
generally easier
to see what you have on your page. The other option -
like shown in
the templates example - is a bit cheaper memory wise,
as you only add
what you need.
Eelco