Java 表单验证播放框架2.0
我现在正在学习教程 我创建了一个类LoginForm.java(而不是示例中的User.class。不是用于持久化的类,只是一个表单值持有者) 在我的控制器中,我会这样做(如示例所示),但我将值设置为空字符串以尝试@Required注释Java 表单验证播放框架2.0,java,playframework,validation,illegalstateexception,Java,Playframework,Validation,Illegalstateexception,我现在正在学习教程 我创建了一个类LoginForm.java(而不是示例中的User.class。不是用于持久化的类,只是一个表单值持有者) 在我的控制器中,我会这样做(如示例所示),但我将值设置为空字符串以尝试@Required注释 Form<LoginForm> loginForm = form(LoginForm.class); Map<String,String> anyData = new HashMap(); anyData.put("email", "")
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);
}
我得到一个执行异常[[IllegalStateException:无值]]
因此,它从未检查/得出结论
if(loginForm.hasErrors())
有人知道这是为什么吗?如果我将这些值设置为示例:
Map<String,String> anyData = new HashMap();
anyData.put("email", "bob@gmail.com");
anyData.put("password", "secret");
Map anyData=new HashMap();
anyData.put(“电子邮件”bob@gmail.com");
anyData.put(“密码”、“秘密”);
一切正常,我用正确的值检索LoginForm对象。
我应该抓住例外吗?play不应该处理这个问题并将loginForm.hasrerrors设置为true吗
谢谢你的帮助 这似乎是Play2.0框架的一个bug。我能够在本地复制相同的问题
我开了一张罚单,以防你想跟进。这是预期的行为 请注意,在检查错误后,必须在窗体上使用.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
非法状态异常似乎来自
bind
。当地图没有数据时,该方法可能不允许您绑定
或获取
。我知道,但当我使用loginForm.bindFromRequest().get()绑定请求中的数据时,真实的帖子也是如此。如果用户没有在表单字段中放入任何数据,如何进行验证?不必编写自己的验证方法?但是你说真正的帖子是有效的,你的地图中没有空值。对不起,真正的帖子也不起作用。输入字段值为空。那么带有填充电子邮件和密码的帖子不起作用了?您在您的帖子中说它可以像预期的那样工作。问题被视为无效而关闭-这是预期的行为
Map<String,String> anyData = new HashMap();
anyData.put("email", "bob@gmail.com");
anyData.put("password", "secret");
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