我正在关注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 吗?
谢谢你的帮助!