我使用sbt版本1.2.8,Scala版本2.11.12编写了一个带有Java Play Framework 2.6.21的小网站。我尝试使用Form <>类创建一些表单,但是我遇到了一些问题,即bindFromRequest()和get()方法总是返回NULL。我该如何解决?
我尝试了一些关于这个问题的答案(包括Stack Overflow),但没有任何效果。
我试图改变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],[])])
我没有任何建议。