Play Framework 2.5: запрос на привязку модели View возвращает «null»

Я попытался связать свое представление с моделью с помощью bindFromRequest(), но представление и модель не связаны, модель дает нулевое значение.

это мой контроллер

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>

person Mayur Thube    schedule 14.04.2016    source источник
comment
Можете ли вы поделиться классом модели Login   -  person Anton    schedule 14.04.2016
comment
И вид пожалуйста   -  person AME    schedule 14.04.2016


Ответы (1)


Я предполагаю, что у вас есть NPE здесь:

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

Если это так, то это потому, что в форме есть ошибки. Сначала вы должны проверить, действительна ли ваша форма:

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

а затем получить вашу модель. Рассмотрим сценарий, когда в вашу форму передается неверный тип данных, в этом случае Play не может построить вашу модель.

person Tijkijiki    schedule 15.04.2016