bindFromRequest验证null

时间:2014-10-25 19:45:43

标签: java playframework

我是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。那么我该如何解决这个问题?

2 个答案:

答案 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()