gpt4 book ai didi

java - 表单验证play framework 2.0

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:00:28 24 4
gpt4 key购买 nike

我正在学习 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;

}

在我的 Controller 中我这样做(作为示例),但我将值设置为空字符串以尝试 @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 对象。我应该捕获异常吗? play 不应该处理这个问题并设置 loginForm.hasErrors = true 吗?

感谢您的帮助!

最佳答案

这是预期的行为。

请注意,检查错误后必须在表单上使用 .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

关于java - 表单验证play framework 2.0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9982916/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com