Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/374.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 表单验证播放框架2.0_Java_Playframework_Validation_Illegalstateexception - Fatal编程技术网

Java 表单验证播放框架2.0

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", "")

我现在正在学习教程

我创建了一个类LoginForm.java(而不是示例中的User.class。不是用于持久化的类,只是一个表单值持有者)

在我的控制器中,我会这样做(如示例所示),但我将值设置为空字符串以尝试@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);
}
我得到一个执行异常[[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