Die Verwendung von cookies mit Struts 2 und Federbeine
Habe ich die folgenden (gekürzt) struts2 action:
public class MyAction extends BaseAction implements CookiesAware {
public String execute() {
if (cookiesMap.containsKey("BLAH"))
blah=Integer.parseInt(cookiesMap.get("BLAH"));
return "success";
}
//For handling cookies
Map<String, String> cookiesMap;
@Override
public void setCookiesMap(Map<String, String> cookiesMap) {
this.cookiesMap = cookiesMap;
}
}
Bekomme ich eine null-Zeiger-Ausnahme aus, wenn ich 'cookiesMap.containsKey' - es scheint mir, dass setCookiesMap nicht genannt. Ich habe implementiert die CookiesAware-Schnittstelle, so würde ich gedacht haben, dass es sollte werden immer genannt - habe ich was verpasst hier?
Dank
- Oder bin ich gegen den Strich hier - sollte ich wirklich die Verwendung von Sitzungen statt? Sind Sitzungen, die 'gesegnet' Art, die Dinge in struts2?
- Ich werde check this out: omkarp.blogspot.com/2007/08/...
- Es scheint mir, dass die Verwendung der "Karte" - Ansatz ist nicht sehr gut für das Lesen von cookies - da müssen Sie die cookies, die Sie möchten (oder alle) in der interceptor-ref, aber es immer noch versucht zu injizieren Sie in setter sowieso zum Absturz bringen, wenn Sie nicht finden können, alle setter!
- Am Ende habe ich entschieden, dass struts2 ist die Unterstützung für cookies ist auch dinky, und ich bin einfach mit dem ServletRequest/Antwort bekommen/Sie jeweils gesetzt. Ich bin mit es jetzt und es funktioniert wunderbar.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Scheint es, dass struts unterstützt nur cookies Lesen, die Sie haben zu gehen, um die servlet-Antwort tatsächlich set ein cookie.
Am Ende, ich haben sich dafür entschieden, die Umgehung der struts2-cookie-Unterstützung vollständig und direkt auf den servlet-request/response-Objekte zum Lesen und schreiben:
Und es ist keine Konfiguration erforderlich für diese Methode in struts.xml oder web.xml,, das ist ein bonus. Also ich bin glücklich mit dieser Lösung, auch wenn es Malt struts2 in ein schlechtes Licht.
Müssen Sie auch umsetzen Cookie-Interceptor für die Aktion in Ihrem struts.xml:
Während ich bin mir bewusst, dass die Frage ist jetzt mehr als 3 Jahre alt, heute habe ich benötigt, um ein cookie zu setzen mit Struts2, hier gelandet, und verwaltet die cookies in einem Struts2-y-Weg (mit 2.3.16). Hoffe das wird einigen helfen, anderen.
Um das setzen von cookies mit Struts2, die Sie benötigen, um gehen Sie folgendermaßen vor:
org.apache.struts2.interceptor.CookieProvider
. (Möchten Sie vielleicht, um zu sehen, seine javadoc)Set<Cookie> getCookies();
Methode, Rückkehr alle cookies, die Sie setzen möchten.cookieProvider
interceptor der gleichen Weise wie @Pat erwähnt in seiner Antwort.Wenn Sie eine domain für ein cookie, wenn Sie testen-setup stellen Sie sicher, dass Sie eine URL angefordert werden unter dieser domain. In meinem Fall, ich wusste nicht, ich war der Zugriff auf meine test-Maschine direkt statt über die domain und den cookie nicht gesetzt werden.
Folgenden Artikel weitere Informationen zur Verwendung der cookie-bewusst-Schnittstelle
http://www.journaldev.com/2203/how-to-get-servlet-session-request-response-context-attributes-in-struts-2-action