0

我尝试使用 bindFromRequest() 将视图与模型绑定,但视图和模型未绑定,模型给出 null 值。

这是我的控制器

package controllers;

import play.mvc.*;
import play.data.Form;
import views.html.*;
import models.Login;
import controllers.*;
import com.avaje.ebean.Model;

public class LoginController extends Controller {

    public Result authenticate() {
        Form<Login> loginForm = Form.form(Login.class).bindFromRequest();

        //  password value is return null.
        System.out.println("password :: "+loginForm.get().password); 
        if (loginForm.hasErrors()) {
          return ok(login.render("Error in login" ,Form.form(Login.class)));
        } else  { }
    }
}

这是模型 Login.java

import com.avaje.ebean.Model;

import javax.persistence.Entity;
import javax.persistence.Id;

@Entity
public class Login extends Model {

  @Id
  public String id;
  public String email;
  public String password;

}

这是登录视图 login.html :

     <form class="login-form" action="@routes.LoginController.authenticate" method="post">

      <h1><a href="@routes.LoginController.index" id="logo"><span>
        <img src="@routes.Assets.at("/images/logo-main.jpg")" alt="PUAthletics" height="42" >
        <link rel="shortcut icon" type="image/png" href="@routes.Assets.at("/images/logo-main.jpg")"/></span></a></h1>
      <p class="loginMessage ">
      @message
      </p>
      <input type="email" name="email" placeholder="Email" value="@form("email").value" />
      <input type="password" name="password" placeholder="Password"/>
      <button type="submit" class="submit-upld">Login</button>
     </form>
4

1 回答 1

0

我猜你在这里有 NPE:

System.out.println("password :: "+loginForm.get().password); 

如果是这样,那是因为表单有错误。您应该首先检查您的表格是否有效:

if (loginForm.hasErrors()) {
   return badRequest(login.render("Error in login" , loginForm);
}

然后检索您的模型。考虑将无效数据类型传递到您的表单的情况,在这种情况下,Play 无法构建您的模型。

于 2016-04-15T21:43:26.940 回答