1

私は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つのエラーが表示されることです。2つはパスワード用、2つはユーザー名用です。それらは同じですが、重複しています。

メソッド「boolvalidateCommand(){name && password}」を作成し、それをcommand.validate()に置き換えると重複がスローされないことがわかりましたが、Grailsの制約機能を使用して物事をドライに保ちたいと思います。

なぜこれが起こるのか考えていますか?本当にありがとう!

4

1 に答える 1

8

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

if(!cmd.hasErrors())

それ以外の

if(cmd.validate())

を呼び出すたびvalidate()に、コマンドオブジェクトに新しい(重複した)エラーが追加されるようです。私見これは起こらないはずで、おそらくGrailsのバグです。この問題の報告を検討する必要があります。

于 2009-05-06T15:37:16.883 に答える