Domanda

Sto creando una piccola applicazione web in Seaside.Ho un componente di accesso e dopo che l'utente ha effettuato l'accesso desidero inviare un cookie quando il componente successivo viene eseguito il rendering.C'è un modo per raggiungere l'oggetto che gestisce la risposta in modo da poter aggiungere qualcosa alle intestazioni che verrà restituito?

Sto cercando di evitare di utilizzare WASession>>redirectWithCookies poiché sembra piuttosto complicato reindirizzare solo perché voglio impostare un cookie.

Esiste già un altro modo per aggiungere un cookie che verrà inviato alla risposta successiva?

È stato utile?

Soluzione

Al momento non esiste un modo integrato per aggiungere cookie durante la fase di azione/richiamata dell'elaborazione della richiesta.Molto probabilmente si tratta di un difetto ed è indicato in questo problema: http://code.google.com/p/seaside/issues/detail?id=48

Attualmente è previsto che questo venga risolto per Seaside 2.9, ma non so se verrà effettuato il backport a 2.8 o meno.

Tieni presente che esiste già (per impostazione predefinita) un reindirizzamento tra le fasi di azione e di rendering per impedire a un aggiornamento di riattivare i callback, quindi nel grande schema delle cose, un altro reindirizzamento in questo caso non lo è COSÌ Cattivo.

Se vuoi ancora approfondire, dai un'occhiata a WARenderContinuation>>handleRequest:.È qui che viene attivata l'elaborazione del callback e iniziata la fase di reindirizzamento o rendering.

Modificato per aggiungere:

Il problema è stato ora risolto e (nell'ultimo codice di sviluppo) ora puoi aggiungere correttamente i cookie alla risposta corrente in qualsiasi momento.Accedi semplicemente all'oggetto risposta nel contesto della richiesta corrente e aggiungi il cookie.Ad esempio, potresti fare qualcosa del tipo:

self requestContext response addCookie: aCookie

È improbabile che venga effettuato il backport su Seaside 2.8 poiché ha richiesto un cambiamento abbastanza importante nel modo in cui vengono gestite le risposte.

Altri suggerimenti

Ho appena approfondito la questione e la risposta sembra essere no.Nello specifico, non c'è modo di ottenere la risposta da WARenderCanvas o qualsiasi cosa a cui possa accedere (si mantiene su WARenderingContext, che si mantiene su WAHtmlStreamDocument, che si mantiene su WAHtmlStreamDocument, che si mantiene sulla risposta flusso ma non la risposta stessa).Penso che sarebbe ragionevole dare al contesto l'accesso alla risposta corrente, proprio per poter impostare le intestazioni su di essa, ma hai chiesto se esistesse già un modo, quindi:NO.

Detto questo, Seaside esegue molti reindirizzamenti aggiuntivi e non sembra avere un grande impatto sull'esperienza dell'utente, quindi forse la cosa da fare è smettere di preoccuparsi che sembri goffo e seguire il flusso dell'API che è già Là :)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top