Play Framework - 如何使用bindFromRequest()和get()方法修复有关NULL值的故障排除

问题描述 投票:0回答:1

我使用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],[])])

我没有任何建议。

java playframework playframework-2.6
1个回答
© www.soinside.com 2019 - 2024. All rights reserved.