Я программировал небольшой сайт с Java Play Framework 2.6.21 с версией sbt 1.2.8, версией Scala 2.11.12. Я пытаюсь создать некоторые формы с помощью класса Form <>, но у меня есть некоторые проблемы с методами bindFromRequest () и get (), которые всегда возвращают NULL. Как я могу это исправить?
Я попытался ответить на несколько вопросов об этой проблеме (включая переполнение стека), но ничего не помогло.
Я пытался изменить версию SBT, тот же результат.
Я пытался включить Ebean, но это хуже, у меня больше ошибок при инъекции ...
Вот мой класс
package models;
import play.data.validation.Constraints;
import javax.persistence.*;
import java.util.HashSet;
import java.util.Set;
@Entity
@Table(name = "usernames")
public class User {
@Id
@GeneratedValue
public Integer Id;
public String name;
public User(){}
public User(Integer Id, String name) {
this.Id = Id;
this.name = name;
}
private static Set<User> users;
static {
users = new HashSet<>();
users.add(new User(1, "John"));
users.add(new User(2, "Jack"));
}
public static Set<User> getAllUsers() {
return users;
}
public static User userById(Integer Id) {
for (User user : users) {
if (Id.equals(user.Id)) {
return user;
}
}
return null;
}
public static void addUser(User user) {
users.add(user);
}
public static String validate() {
return "Good";
}
public void setId() {
this.Id = Id;
}
public void setName() {
this.name = name;
}
public Integer getId() {
return this.Id;
}
public String getName() {
return this.name;
}
}
Вот мои файлы маршрутов для моего сайта
#The user webpage
GET /user controllers.UserController.index()
GET /user/newUser controllers.UserController.create()
GET /user/resultCreate controllers.UserController.resultCreate()
GET /user/:id controllers.UserController.show(id : Integer)
Вот мой HTML-файл
@(userForm : Form[models.User])
@import helper._
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Create a new user</title>
<link rel="stylesheet" href='@routes.Assets.at("stylesheets/helloworld.css")'>
<link rel="icon" href='@routes.Assets.at("images/favicon.png")'>
</head>
<body>
@helper.form(routes.UserController.resultCreate()) {
@helper.CSRF.formField
@helper.inputText(userForm("Id"))
@helper.inputText(userForm("name"))
<button type="submit">Create widget</button>
}
</body>
</html>
И, наконец, часть кода для результата
public Result resultCreate() {
Form<User> userForm = formFactory.form(User.class).bindFromRequest(request());
System.out.println(userForm);
User user;
if(!userForm.hasErrors()) {
Logger.debug("Id : " + userForm.get().Id);
user = userForm.get();
Logger.debug(User.validate());
} else {
System.out.println("Not good");
user = null;
}
return ok(views.html.resultCreate.render(user));
}
Я за исключением того, что введенный пользователь отображается на веб-странице результатов, но ничего не отображается. Я тестировал отображение в консоли, и значение атрибутов класса равно NULL.
Вот что отображается на моей консоли:
Form(of=class models.User, data={name=Toto, csrfToken=109d71e13e39d0c23e8874b4c71f9e6387890cdc-1553372828827-d4c200687a8689d336c0c962, Id=7}, value=Optional[models.User@6b8e
fb4f], errors=[ValidationError(,[Good],[])])
У меня нет предложений.