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 を設定するべきではありませんか?
助けてくれてありがとう!