7

Non riesco a visualizzare gli errori dal mio oggetto comando. Fa bene il lavoro ma la mia vista .gsp non rende gli errori che ho sollevato.Errore di convalida del comando di rendering attraverso un reindirizzamento

Qui è la mia azione di controllo:

def handleModifyProfile2 = { CreditProviderModificationCommand cpmc -> // bind params to the command object 
    if (cpmc.hasErrors()) { 
     flash.message = "Error modifying your profile:" 
     redirect(action: "modifyProfile", params: [creditProvider : cpmc]) 
    } ... 

Ecco come io cerco di rendere gli errori a mio avviso .gsp:

<g:hasErrors bean="${creditProvider}"> 
    <div class="errors"> 
     <g:renderErrors bean="${creditProvider}" as="list" /> 
    </div> 
</g:hasErrors> 

Come posso ottenere gli errori da visualizzare nella vista?

risposta

9

Non è possibile inviare il comando attraverso in un reindirizzamento utilizzando params. Hai un paio di opzioni:

  • render() nella condizione di errore, invece di redirect() ing:

    if(cpmc.hasErrors()) { 
        render(view: 'profile', model: [creditProvider: cpmc]) 
    } 
    

    Questo è il linguaggio più comune per quello che stai facendo.

  • Conservare il comando nella sessione di persistere dall'altra parte della redirect:

    if(cpmc.hasErrors()) { 
        session.cpmc = cpmc 
        redirect(...) 
    } 
    
    // and in your action 
    def cpmc = session.cpmc ?: null 
    render(view: 'profile', model: [creditProvider: cpmc]) 
    

    Questa opzione è alquanto discutibile. Se non eseguito correttamente, puoi inquinare la sessione e lasciare gli oggetti in giro, occupando la memoria. Se fatto correttamente, però, può essere un modo decente per implementare un post-redirect-get.

+0

Ah ah! Hai finito 3 ore di roaming. Grazie mille! –

+0

Certo, nessun problema. –

+1

Grazie, ho trovato utile anche la tua risposta. A proposito, suppongo che l'uso del flash invece della sessione direttamente impedirebbe l'inquinamento della sessione? –

Problemi correlati