2009-05-05 77 views
1

我是新來的Grails和我有一個問題: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)使用Command對象,這裏的兩個代碼:

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個錯誤,二爲密碼和兩個用於美國ername。它們是相同的,但重複。

我發現創建方法「布爾validateCommand(){名& &密碼}」和替換它的command.validate()不會引發重複,但我想用的Grails讓事情乾的約束功能。

任何想法爲什麼發生這種情況?非常感謝!

回答

8

當您將命令對象注入到控制器操作中時,Grails會自動執行validate(),因此無需手動調用它。嘗試

if(!cmd.hasErrors()) 

,而不是

if(cmd.validate()) 

看來,是到validate()每次調用增加了新的(副本)錯誤的命令對象。恕我直言,這不應該發生,可能是在Grails中的錯誤。你應該考慮reporting這個問題。

+0

這只是救了我的理智。謝謝 – 2009-05-21 04:57:16