Hi!
We have an application where the preferred user language is
stored in his account. So, he may see the application in English,
but as soon as he logs-in, the app switches to the language he
choose before. We do this by removing his language from the session
language list, and adding it again as the first one.
I'm implementing Logout now. To implement Logout, I have used
code from Practical WebObjects book:
public WOComponent logout() {
NSMutableDictionary arguments = new NSMutableDictionary();
arguments.setObjectForKey(Boolean.FALSE, "wosid");
session().terminate();
WORedirect mainPage = (WORedirect) pageWithName
("WORedirect");
mainPage.setUrl(context().directActionURLForActionNamed
("logout", arguments));
return mainPage;
}
When using this, it's obvious that, whatever the language was
before, the Logout page will appear in english. So, I did a small
modification:
public WOComponent logout() {
NSMutableDictionary arguments = new NSMutableDictionary();
arguments.setObjectForKey(Boolean.FALSE, "wosid");
arguments.setObjectForKey(session().languages
().objectAtIndex(0), "language");
session().terminate();
WORedirect mainPage = (WORedirect) pageWithName
("WORedirect");
mainPage.setUrl(context().directActionURLForActionNamed
("logout", arguments));
return mainPage;
}
And, in DirectAction, I tried this:
public WOActionResults logoutAction() {
String language = (String)request().formValueForKey
("language");
changeLanguage(language);
return pageWithName("LogoutComponent");
}
public void changeLanguage(String newLanguage) {
NSMutableArray languagesArray = new NSMutableArray
(this.languages());
languagesArray.removeObject(newLanguage);
languagesArray.insertObjectAtIndex(newLanguage,0);
this.setLanguages(languagesArray);
}
This almost works, but I'm having a problem... the
"LogoutComponent" itself appears in the correct language, but all
the sub-components it includes appear in English. I suspect this
happens because they have WOHyperlinks, so a new session is created
somewhere between by return pageWithName and the page actually gets
sent to the browser. Probably, the other subcomponents are getting
the language from the Session (which, at that point, i cannot
control) and not from the Direct Action.
As the session does not exist during the execution of my
logoutAction() method, I cannot change it's languages array. Is
there any way to solve this? Maybe forcing the creation of a
session in the logoutAction() method, but I could not find out how
to do it.
Yours
Miguel Arroz
"GUERRA E' PAZ
LIBERDADE E' ESCRAVIDAO
IGNORANCIA E' FORCA" -- 1984
Miguel Arroz
http://www.ipragma.com
_______________________________________________
Do not post admin requests to the list. They will be ignored.
Webobjects-dev mailing list (email@hidden)
Help/Unsubscribe/Update your Subscription:
40guiamac.com
This email sent to email@hidden