7

No puedo procesar los errores de mi objeto de comando. Hace bien el trabajo, pero mi vista .gsp no representa los errores que planteo.Error de validación de comandos de representación en un redireccionamiento

Aquí es mi acción del controlador:

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]) 
    } ... 

Así es como trato de hacer que los errores en mi opinión .gsp:

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

¿Cómo puedo obtener los errores que se muestran en el ¿ver?

Respuesta

9

No puede enviar el comando en una redirección usando params. Usted tiene un par de opciones:

  • render() en la condición de error en lugar de redirect() ING:

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

    Este es el lenguaje más común para lo que está haciendo.

  • tienda el comando en la sesión de persistir a través de la redirección:

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

    Esta opción es algo cuestionable. Si no se hace correctamente, puede contaminar la sesión y dejar objetos colgando, ocupando la memoria. Sin embargo, si se hace correctamente, puede ser una buena forma de implementar un post-redirect-get.

+0

AH ¡ah! Terminaste 3 horas de roaming. ¡Muchas gracias! –

+0

Claro, no hay problema. –

+1

Gracias, también encontré tu respuesta útil. Por cierto, supongo que usar flash en lugar de sesión directamente evitaría la contaminación de la sesión. –

Cuestiones relacionadas