Question

Je crée une petite application Web sous Seaside. J'ai un composant de connexion, et après que l'utilisateur se soit connecté, je souhaite envoyer un cookie lorsque le composant suivant s'affiche lui-même. Y at-il un moyen d’obtenir la réponse de l’objet afin que je puisse ajouter quelque chose aux en-têtes qu’il va générer?

J'essaie d'éviter d'utiliser WASession > > redirectWithCookies, car il semble assez difficile de rediriger vos comptes uniquement parce que je veux créer un cookie.

Existe-t-il déjà un autre moyen d’ajouter un cookie qui disparaîtra lors de la prochaine réponse?

Était-ce utile?

La solution

Il n'existe actuellement aucun moyen intégré d'ajouter des cookies pendant la phase d'action / rappel du traitement de la demande. C’est probablement un défaut qui est noté dans ce numéro: http: / /code.google.com/p/seaside/issues/detail?id=48

Ceci est actuellement prévu pour être corrigé pour Seaside 2.9 mais je ne sais pas s'il sera même rétroporté à 2.8 ou non.

N'oubliez pas qu'il existe déjà (par défaut) une redirection entre l'action et les phases de rendu pour empêcher l'actualisation de déclencher à nouveau les rappels. Par conséquent, dans le grand schéma des choses, une redirection supplémentaire ne s'applique pas dans ce cas. so bad.

Si vous souhaitez continuer à explorer plus en profondeur, consultez WARenderContinuation > > handleRequest :. C'est là que le traitement des rappels est déclenché et que la phase de redirection ou de rendu commence.

Modifié pour ajouter:

Le problème a été corrigé et (dans le dernier code de développement), vous pouvez désormais ajouter correctement les cookies à la réponse actuelle à tout moment. Accédez simplement à l'objet de réponse dans le contexte de la demande en cours et ajoutez le cookie. Par exemple, vous pourriez faire quelque chose comme:

self requestContext response addCookie: aCookie

Il est peu probable que cette opération soit rétroportée dans Seaside 2.8, car elle nécessitait un changement assez important dans la manière dont les réponses sont traitées.

Autres conseils

Je viens de regarder cela en profondeur, et la réponse semble être non. En particulier, il n’existe aucun moyen d’obtenir la réponse de WARenderCanvas ou tout élément auquel il peut accéder (il conserve le WARenderingContext, qui contient le WAHtmlStreamDocument, qui conserve le flux de la réponse, mais pas la réponse elle-même). . Je pense qu’il serait raisonnable de donner au contexte l’accès à la réponse actuelle, précisément pour pouvoir y placer des en-têtes, mais vous avez demandé s’il existait déjà un moyen, alors: non.

Cela étant dit, Seaside effectue beaucoup de redirection supplémentaire et ne semble pas avoir beaucoup d’impact sur l’expérience utilisateur. Vous devez donc peut-être cesser de vous inquiéter à propos de cette situation et de vous en tenir au courant API déjà présente:)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top