venerdì 26 settembre 2008

Grails non invia più i form ?

Recentemente mi sono trovato davanti un problema molto strano con Grails dopo l'upgrade alla versione 1.0.3...improvvisamente il submit di un form ha smesso di funzionare, resituendomi un bel 404 page not found. A prima vista tutto sembrava a posto, l'url chiamato corretto, nessun problema. Dopo una Googolata abbastanza approfondita, ho scoperto che il problema è dovuto alla modifica dell'ordine di risoluzione dell'URL nell'url mapper di Grails 1.0.3 rispetto alle versioni precedenti.

In pratica, fino alla versione 1.0.2, per risolvere l'URL da chiamare, l'URL mapper verificava il valore del parametro action del tag <g:actionSubmit> (opzionale), se non era presente il valore del parametro action del tag <g:form> (opzionale) e infine il valore del parametro value di <g:actionSubmit>. Dalla versione 1.0.3 invece il valore del parametro value di <g:actionSubmit> ha la precedenza rispetto a action di <g:form>. Questo conporta che, nonostante l'URL mostrato sia quello del parametro action di <g:form>, Grails ricerchi invece una action con il nome del parametro value di <g:actionSubmit>, lamentandosi perchè non lo trova.

Le soluzioni possibili sono due:
  1. Inserire il parametro opzionale action in <g:actionSubmit>
  2. Usare al posto di <g:actionSubmit> il tag <g:submitButton> che utilizza in ogni caso la action definita in <g:form>
Maggiori dettagli si possono trovare qui:

http://www.nabble.com/behavior-change-in-1.0.3,-possible-bug:-submitAction-tag-and-URL-mapping-td17703843.html

dove tra l'altro viene spiegato che il comportamento corretto è quello attuale, cosi come il motivo per cui viene comunque mostrato l'URL dell'action di g:form...

Nessun commento: