質問

私は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つはユーザー名用です。それらは同じですが、重複しています。

メソッド&quot; bool validateCommand(){name&amp;&amp;パスワード}&quot; command.validate()に置き換えても重複はスローされませんが、Grailsの制約機能を使用して物事をドライに保ちたいと思います。

これが起こる理由は何ですか?どうもありがとう!

役に立ちましたか?

解決

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

if(!cmd.hasErrors())

の代わりに

if(cmd.validate())

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top