2009-05-05 10 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つのエラー、パスワード用の2つおよび2を示すことです名前。彼らは同じですが、重複しています。

私は()メソッドを作成する「BOOL validateCommand(){名& &パスワード}」とcommand.validateのためにそれを交換して、重複を投げていないことがわかったが、私はDRYものを維持するためのGrailsの制約機能を使用したいです。

これはどうして起こりますか?本当にありがとう!

答えて

8

コントローラオブジェクトにコマンドオブジェクトを挿入すると、Grailsはvalidate()を自動的に実行するので、手動で呼び出す必要はありません。

if(!cmd.hasErrors()) 

代わりの

if(cmd.validate()) 

を試してみてくださいvalidate()のすべての呼び出しは、コマンドオブジェクトに新しい(重複)エラーを追加することに、そうです。 IMHOこれは起こるべきではなく、おそらくGrailsのバグです。 reportingこの問題を考慮する必要があります。

+0

これはちょうど私の正気を救った。ありがとうございました –

関連する問題