我是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> 

Controller(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 validateCommand(){name&amp;&amp;密码}“并将其替换为command.validate()不会抛出重复项,但我想使用Grails的约束功能来保持DRY。

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

有帮助吗?

解决方案

当您将命令对象注入控制器操作时,Grails会自动执行 validate(),因此无需手动调用它。尝试

if(!cmd.hasErrors())

而不是

if(cmd.validate())

似乎每次调用 validate()都会向命令对象添加新的(重复的)错误。恕我直言,这不应该发生,可能是Grails中的一个错误。您应该考虑报告此问题。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top