7

http://www.playframework.org/documentation/2.0/JavaFormsのチュートリアルに従っています

クラスLoginForm.javaを作成しました(例のUser.classの代わりに。永続化するためのクラスではなく、フォーム値ホルダーです)

package domain;

import static play.data.validation.Constraints.*;

public class LoginForm {

        @Required
        public String email;
        public String password;

}

そして、私のコントローラーでは(例として)そうしますが、値を空の文字列に設定して @Required アノテーションを試します。

Form<LoginForm> loginForm = form(LoginForm.class);
Map<String,String> anyData = new HashMap();
anyData.put("email", "");
anyData.put("password", "");

//Faking a post
LoginForm postedLoginForm = loginForm.bind(anyData).get();

if(loginForm.hasErrors()) {
  //Just for this test task, should have another error handling..
  return ok("@Required annotation kicked in..");
} else {
  return ok("Got form values, email: " + postedLoginForm.email + " password: " + postedLoginForm.password);
}

しかし、次の場所で:

LoginForm postedLoginForm = loginForm.bind(anyData).get();

実行例外 [[IllegalStateException: No value]] が発生します

したがって、チェック/到達することはありません

if(loginForm.hasErrors()) 

これがなぜなのか誰か知っていますか?例として値を設定した場合:

Map<String,String> anyData = new HashMap();
anyData.put("email", "bob@gmail.com");
anyData.put("password", "secret");

すべてが機能し、正しい値で LoginForm オブジェクトを取得します。例外をキャッチする必要がありますか? 再生して loginForm.hasErrors = true を設定するべきではありませんか?

助けてくれてありがとう!

4

2 に答える 2

25

これは予期される動作です。

エラーをチェックした後、フォームで .get() を使用する必要があることに注意してください。

LoginForm preLoginForm = loginForm.bind(anyData);

if(loginForm.hasErrors()) {
    //Just for this test task, should have another error handling..
    return ok("@Required annotation kicked in..");
}
LoginForm postedLoginForm = preLoginForm.get();
// ... Now use postedLoginForm 
于 2012-05-09T23:09:21.937 に答える
0

これは Play 2.0 フレームワークのバグのようです。同じ問題をローカルで再現できました。

フォローアップしたい場合に備えて、チケットhttps://play.lighthouseapp.com/projects/82401-play-20/tickets/313を開きました。

于 2012-04-03T00:13:21.723 に答える