在重定向中呈现命令验证错误

Ale*_*ier 7 error-handling grails render grails-validation grails-constraints

我无法从命令对象中呈现错误.它做得很好,但我的.gsp视图不会渲染我提出的错误.

这是我的控制器动作:

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])
   } ...
Run Code Online (Sandbox Code Playgroud)

以下是我尝试在.gsp视图中呈现错误的方法:

<g:hasErrors bean="${creditProvider}">
   <div class="errors">
       <g:renderErrors bean="${creditProvider}" as="list" />
   </div>
</g:hasErrors>
Run Code Online (Sandbox Code Playgroud)

如何才能在视图中显示错误?

Rob*_*ska 9

您无法使用重定向发送命令params.你有几个选择:

  • render()在错误条件而不是redirect():

    if(cpmc.hasErrors()) {
        render(view: 'profile', model: [creditProvider: cpmc])
    }
    
    Run Code Online (Sandbox Code Playgroud)

    这是你正在做的最常见的习语.

  • 将命令存储在会话中以将其保留在重定向中:

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

    这个选项有点值得怀疑.如果操作不正确,您可能会污染会话并使对象闲置,占用内存.但是,如果正确完成,它可能是实现post-redirect-get的一种不错的方法.