当前位置: 首页 > 面试题库 >

Play中的bindFromRequest问题!框架2.3

柴琦
2023-03-14
问题内容

我正在尝试使用Play的自动绑定功能,但没有成功。我正在Eclipse 4.4 Luna上用Java开发

这是我的表格:

<h2>Create a new user</h2>
<form action="@routes.Backend.createUser()" method="post">
    First Name
    <input type="text" name="firstName" />
    Last Name
    <input type="text" name="lastName" />
    E-mail
    <input type="email" name="email" />
    PIN
    <input type="number" name="pin" />
    Status
    <input type="text" name="status" />
    Is guest?
    <input type="checkbox" name="isGuest" />

    <input type="submit" value="Create user" />
</form>

这是我的课程“用户”:

@Entity
public class Users extends Model {

// Database columns
@Id
public int userId;

public String firstName;
public String lastName;
public String email;
public int pin;
public String status;
public boolean isGuest;

}

这是我的控制器:

public class Backend extends Controller {

  public static Result createUser() {
    Form<Users> form = Form.form(Users.class).bindFromRequest();
    if (form.hasErrors()) {
        // doSomething()
    } else {
        Users u = form.get();
        u.save();
    }

    // TESTING
    // Checking the content of the request
    DynamicForm requestData = Form.form().bindFromRequest();
    String firstName = requestData.get("firstName");
    String lastName = requestData.get("lastName");
    // Printing the content works, I am able to see the correct values
    System.out.println(firstName); // Bob
    System.out.println(lastName); // Smith
    // This somehow doesn't work...
    System.out.println(u.firstName); // NULL
    System.out.println(u.lastName); // NULL
    System.out.println(u.userId); // Correctly generated
    // END OF TESTING

    return redirect(routes.Backend.allUsers());
  }
}

我不知道为什么自动绑定值不起作用。我已经确保表单中的字段名称与类中的属性名称相对应,这对于表单绑定起作用就足够了,对吗?

我正在使用Eclipse Luna,并且关闭了自动项目构建(我从控制台手动进行)。我知道有时候Eclipse会由于该自动构建功能而引起问题。
注意:这是要走的路,但是我没有按照用户Dmitri的建议使用activator命令清理项目。
另外,只要不打开Eclipse中的自动构建功能,您只需执行一次。

我已经尝试过多次重启Eclipse和应用程序,但是都没有成功…

编辑: 我尝试仅对我的Users类使用String属性,因为requestData.get(String
s)方法返回String。但是仍然没有成功…

编辑2: 我将手动绑定值…如果有人有想法,请发布:)

编辑3: 我已更新我的代码,以遵循下面的答案中提到的规则

编辑4: 仅当使用Postgresql 9.3数据库时,我才能自动绑定工作。当我使用内存数据库时,一切都会顺利进行。另外,由于没有用于Java
8和Postgresql
9.3的JDBC驱动程序,因此我使用的驱动程序版本较旧(实际上,该驱动程序位于PGSQL的网站上,但无法与Play一起使用)。我将不得不检查另一个数据库会发生什么,然后我将在这里报告!

编辑5: 我试图像这样创建我的自定义数据绑定器:

        Formatters.register(User.class, new Formatters.SimpleFormatter<User>() {
        @Override
        public User parse(String arg0, Locale arg1) throws ParseException {
            User u = new Model.Finder<Integer, User>(Integer.class, User.class).byId(Integer.parseInt(arg0));
            return u;
        }
        @Override
        public String print(User arg0, Locale arg1) {
            return "User : " + arg0.firstName;
        }
    });

…但是没有用!

编辑6:
用户Dmitri找到了一个可行的解决方案:您必须在Eclipse之外编译项目。看来Eclipse的编译器和Play之间有些不兼容!框架的编译器…


问题答案:

我一直在努力解决完全相同的问题:bindFromRequest为“名称”字段返回null。在这个Play for
Java简介视频中,我所做的一切与youtube.com/watch?v=bLrmnjPQsZc完全一样。但是仍然没有运气。我一直在使用JDK
1.8开发Windows 7。IDE:Eclipse 4.4.0。我通过cygwin运行激活器。

这就是为我解决问题的原因:

  1. 在Eclipse中:项目->自动构建->关闭
  2. 在cygwin中:./activator clean; ./activator编译;./activator运行;

此后,bindFromRequest正确绑定名称并将其放入数据库中。



 类似资料:
  • **编程对象,Settings.UseJavaCP.Value=true。 Build.Scala

  • 这个bug似乎是一个递归bug,公司要求工作表,而工作表又要求公司,这……你就明白了。我已经在互联网和堆栈溢出中搜索了这个问题,我发现了错误发生的原因,但解决方案始终是编写自己的解析器或使用flexjson或其他方法。我只是想知道是否有解决办法,这必须是因为游戏很受欢迎,人们肯定会在一次操作中获取帖子和评论,或者不是吗? 必须有一个解决方案,不需要替换掉json解析器或编写自己的解析器。 公司.j

  • 问题内容: 我已经开发了一个Spring / JPA应用程序: 服务,存储库和域层即将完成 。 该 所缺的只是层是网络层 。我正在考虑将Playframework 2.0用于Web层,但不确定是否可以 在Playframework 2.0类中注入/使用spring bean 。 这可能吗?如果可以,怎么办? 问题答案: 您可以。已针对Play 2.5.x更新: https://github.com

  • 我目前正在阅读“带有Zend框架的简易PHP网站”。在某种程度上,它引入了原则,并给出了一个src代码以及一个关于如何正确安装东西的文本。我正确地遵循了所有步骤,但在其中一个步骤中,您必须使用“seed.php”,它读取一些ASIN并将一些amazon产品详细信息加载到数据库中。但是,执行脚本会给我带来错误,而且它似乎找不到文件。 PHP警告:include_once(WJG\Controller

  • 问题内容: 我正在尝试绘制Play框架如何支持转义。 这是一个很好的页面,阐明了所需的功能:https : //www.owasp.org/index.php/XSS_%28Cross_Site_Scripting%29_Prevention_Cheat_Sheet 因此,我尝试将其与Play模板功能相关联,并充分了解Play的功能和不功能。 HTML转义:或函数 属性转义:我找不到内置解决方案

  • 我在 PLay 2 中将我的应用程序划分为不同的项目。但我刚刚意识到我不知道如何在同一台服务器中运行多个播放应用程序。 有人知道怎么做吗? 让我们假设这是不可能的,因此,我将在同一个根项目中部署多个播放应用程序(微服务将充当插件)。你认为这会打败微服务架构吗?。我会让每个模块独立行动。