我是Java Play Framework的新手,我试图让身份验证工作。所以我正在学习本教程:https://www.playframework.com/documentation/2.1.0/JavaGuide4
这是我的代码:
public static Result authenticate()
{
Form<Login> loginForm = form(Login.class).bindFromRequest();
return ok(loginForm.toString());
}
public static class Login
{
public String email;
public String password;
public String validate()
{
return "VALIDATE "+email+password;
}
}
在方法authenticticate()中,我可以看到提交的表单值,但是Login类中的方法validate()没有看到它们(变量总是为null).loginForm.toString()的输出包含:
Form(of=class controllers.Application$Login, data={email=asdf@asdf, password=asdf}, value=None, errors={=[ValidationError(,[VALIDATE nullnull],[])]})
正如您所看到的,数据已被接收..但在validate方法中,数据突然等于null。那么我该如何解决这个问题?
答案 0 :(得分:1)
你没有提到你是如何打电话validate()
但是我认为这可能会有所帮助,做一些类似的事情:
public static Result authenticate() {
Form<Login> form = form(Login.class).bindFromRequest();
// handle errors
if (!form.hasErrors()) {
Login login = form.get();
Logger.debug(login.validate());
} else {
// bad request
}
}
这适合我。
答案 1 :(得分:0)
如果您认为验证已通过,则模型中的方法验证应返回null,否则您应返回错误消息文本。然后你需要通过“hasGlobalError”方法检查表单是否包含错误。当validate()方法返回String而不是null时,将填充globalError。但在您的情况下,您应该使用一些模型字段注释 - https://www.playframework.com/documentation/2.3.x/api/java/play/data/validation/Constraints.html。
如果要检查表单是否失败 - 那么您使用“hasErrors”方法。
public static class Login {
@Constraints.Email
public String email;
@Constraints.MinLength(value = 6)
public String password;
}
此类型号将检查提供的电子邮件是否真的是电子邮件,密码是否长于或等于6个字符。
PS。不要在模板上使用toString,你应该使用render()