L'utilisation de cookies avec Struts 2 et Struts
J'ai suivantes (raccourcie) 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;
}
}
J'obtiens une exception de pointeur null lorsque je fais " cookiesMap.containsKey " - il me semble que setCookiesMap n'est pas appelé. J'ai mis en place le CookiesAware interface, donc j'ai pensé qu'il devrait être appelé - ai-je raté quelque chose ici?
Grâce
Ou suis-je à contre-courant ici - dois-je vraiment être à l'aide de sessions à la place? Ce sont des sessions les plus "heureux" de faire les choses dans struts2?
Je vais vérifier cela: omkarp.blogspot.com/2007/08/...
Il me semble que l'utilisation de la "carte" approche n'est pas très bon pour la lecture les témoins - parce que vous devez spécifier les cookies que vous voulez (ou tous) dans l'interceptor-ref, mais il essaie toujours de les injecter dans les incubateurs de toute façon, s'écraser si elle ne peut pas trouver tout les poseurs!
En fin de compte, j'ai décidé que struts2 de soutien pour l'utilisation des cookies est trop mimi, et je suis tout simplement utiliser le ServletRequest de Réponse/pour obtenir/mettre respectivement. Je l'utilise maintenant et il fonctionne à merveille.
Je vais vérifier cela: omkarp.blogspot.com/2007/08/...
Il me semble que l'utilisation de la "carte" approche n'est pas très bon pour la lecture les témoins - parce que vous devez spécifier les cookies que vous voulez (ou tous) dans l'interceptor-ref, mais il essaie toujours de les injecter dans les incubateurs de toute façon, s'écraser si elle ne peut pas trouver tout les poseurs!
En fin de compte, j'ai décidé que struts2 de soutien pour l'utilisation des cookies est trop mimi, et je suis tout simplement utiliser le ServletRequest de Réponse/pour obtenir/mettre respectivement. Je l'utilise maintenant et il fonctionne à merveille.
OriginalL'auteur Chris | 2010-07-28
Vous devez vous connecter pour publier un commentaire.
Il semble que struts prend uniquement en charge la lecture de cookies, vous devez aller à la servlet réponse à réellement ensemble un cookie.
En fin de compte, j'ai opté pour contourner le struts2 le support des cookies entièrement et aller directement à la servlet de demande/réponse d'objets pour la lecture et l'écriture:
Et il n'y a aucune configuration n'est nécessaire pour cette méthode en struts.xml ou web.xml, qui est un bonus. Donc, je suis heureux avec cette solution, même si elle n'en peinture struts2 dans une lumière pauvre.
veuillez s'il vous plaît jeter un oeil à cette question stackoverflow.com/questions/17779656/...
OriginalL'auteur Chris
Vous devez également mettre en œuvre les Témoin De L'Intercepteur pour la définition de action dans votre struts.xml:
Ok maintenant que j'ai ajouté à la configuration des cookies, il ne sera pas le fil de mes propriétés à des éléments d'entrée plus! Je reçois de nombreuses erreurs comme ci-dessous dans ma console: 13016 [http-7080-2] AVERTIR org.apache.struts2.util.TextProviderHelper - La première TextProvider dans le ValueStack (les actions.les emplois.De recherche) n'a pas pu localiser le message de ressources avec la clé 'division' 13016 [http-7080-2] AVERTIR org.apache.struts2.util.TextProviderHelper - La valeur par défaut de l'expression "division" évalué à '0',
Haha, toujours avec le XML. Si vous avez définis comme dans mon exemple, cela signifie que ce qui s'est passé, c'est que votre défaut de l'intercepteur de la pile n'est pas invoquée plus. Voir mon code mis à jour (environ 30 secondes) pour voir comment résoudre ce problème.
Merci beaucoup pour l'aide. Ok j'ai mis le "defaultStack en ligne" et vous avez raison, il résout le câblage d'entrée. Mais les cookies semblent être un placebo - ils compiler, lors de l'exécution d'-je les utiliser avec n'connecté mises en garde, mais ils n'ont tout simplement rien.
Hmmm, intéressant...je n'ai pas utilisé les cookies dans mon Struts2 apps, mais il semble que le Cookie par défaut de l'Intercepteur est seulement pour obtenir des cookies dans votre action - ça ne vous autorise pas à les mettre... j'ai googlé un peu et trouvé ce post qui a l'air prometteur: omkarp.blogspot.com/2007/11/... Il décrit la création d'un cookie personnalisé intercepteur qui vous permet d'ajouter des cookies pour la réponse après traitement dans l'action.
OriginalL'auteur Pat
Alors que je suis conscient que la question est maintenant de plus de 3 ans, aujourd'hui j'avais besoin de définir un cookie avec Struts2, a atterri ici, et a réussi à placer des cookies dans un Struts2-y (grâce 2.3.16). Espérons que cela aidera certains d'autres.
Afin de définir des cookies avec Struts2, vous devez suivre ces étapes:
org.apache.struts2.interceptor.CookieProvider
. (Vous pouvez voir son javadoc)Set<Cookie> getCookies();
méthode, en retournant tous les cookies que vous souhaitez définir.cookieProvider
intercepteur de la même façon que @Pat mentionné dans sa réponse.Si vous définissez un domaine pour un témoin, lorsque vous testez cette configuration, assurez-vous de demander une URL en vertu de ce domaine. Dans mon cas, je ne savais pas que j'étais accéder à ma machine de test directement au lieu de passer par le domaine, et le cookie n'a pas été définie.
OriginalL'auteur orique
Article suivant a plus de détails sur la façon d'utiliser un cookie au courant de l'interface
http://www.journaldev.com/2203/how-to-get-servlet-session-request-response-context-attributes-in-struts-2-action
OriginalL'auteur rajnish