代码之家  ›  专栏  ›  技术社区  ›  Pablo Fernandez

Grails重复错误消息

  •  1
  • Pablo Fernandez  · 技术社区  · 15 年前

    我刚接触过Grails,但有一个问题:

    我有一段GSP:

    <g:form url="[controller:'main',action:'login']"> 
      <label for="name">Usuario:</label><br/> 
      <input type="text" name="name" /><br/> 
      <label for="pass">Password:</label><br/> 
      <input type="password" name="password"/><br/> 
      <input type="submit" value="Login"/><br/> 
      <g:renderErrors bean="${cmd}"/> 
    </g:form> 
    

    控制器(maincontroller.groovy)使用一个命令对象,这是两个对象的代码:

    def login = { LoginCommand cmd -> 
      if(cmd.validate()){ 
      redirect(action:'ok') 
      }else{ 
      render(view:'index',model:[cmd:cmd]) 
      } 
      } 
    
    class LoginCommand { 
    
            String name 
            String password 
    
            static constraints = { 
                    name(blank:false,size:5..10) 
                    password(blank:false,size:5..10) 
            } 
    } 
    

    问题是,当我输入错误的名称或密码时(空白或超出范围) 它显示4个错误,两个是密码,两个是用户名 . 它们是相同的,但是重复的。

    我发现创建一个方法“bool validate command()name&password”并将其替换为command.validate()不会抛出重复项,但我希望使用grails的约束特性来保持干燥。

    知道为什么会这样吗?非常感谢!

    1 回复  |  直到 12 年前
        1
  •  8
  •   Daniel Rinser    15 年前

    将命令对象注入控制器操作时,Grails将执行 validate() 自动,所以不需要手动调用它。尝试

    if(!cmd.hasErrors())
    

    而不是

    if(cmd.validate())
    

    似乎,每一个电话 有效() 向命令对象添加新(重复)错误。我知道这不应该发生,可能是Grails中的一个bug。你应该考虑 reporting 这个问题。