は、私は例の代わりにUser.classのクラスLoginForm.javaを(作成しました。ちょうどフォームの値ホルダー永続化のためのクラスではなく、 )フォームバリデーションプレイフレームワーク2.0
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が:いいえ値]]実行例外を取得だから、決してチェックが/
if(loginForm.hasErrors())
に来る
は誰もしませんなぜこれが分かっていますか?値を例として設定した場合:
Map<String,String> anyData = new HashMap();
anyData.put("email", "[email protected]");
anyData.put("password", "secret");
すべてが機能し、正しい値でLoginFormオブジェクトを取得します。 私はExceptionをキャッチするはずですか?それを処理してloginForm.hasErrors = trueを設定しないでください。
ありがとうございました!
IllegalStateExceptionが 'bind'から来ているようです。マップがデータを持たないときに、そのメソッドが 'bind'または' get'を許可しないかもしれません。 –
リクエストからデータをバインドするloginForm.bindFromRequest()。get()を使用すると、同じことが実際の投稿に表示されます。ユーザーがフォームフィールドにデータを入力しなかった場合、どのように検証されますか?独自の検証メソッドを記述する必要はありませんか? –
しかし、実際の投稿が機能していて、地図に空の値がないと言っています。 –