只是尝试播放框架,提交表单的值为空

Posted

技术标签:

【中文标题】只是尝试播放框架,提交表单的值为空【英文标题】:Just trying Play framework, the value from the submitted form is null 【发布时间】:2014-09-03 18:46:45 【问题描述】:

我刚刚尝试了 Play 框架,并使用模板 play-java-intro 运行示例应用程序。

应用程序的索引页由一个“名称”文本框和一个提交按钮组成。如果我单击提交按钮,它将文本框的“名称”值存储到“人员”表中(数据库使用 H2)。但是,“名称”值未能发送到控制器。它在控制器中返回为空值。

模型: Person.java

@Entity
public class Person extends Model 

    @Id
    public String id;

    public String name;

视图: index.scala.html

@()

@main("Welcome to Play") 
    <script type='text/javascript' src='@routes.Assets.at("javascripts/index.js")'></script>

    <ul id="persons"></ul>

    <form method="POST" action="@routes.Application.addPerson()">
        <input type="text" name="name" />
        <button>Add Person</button>
    </form>

控制器: Application.java

public class Application extends Controller 

    public static Result index() 
        return ok(index.render());
    

    public static Result addPerson() 
        //The person.name is null here
        Person person = Form.form(Person.class).bindFromRequest().get();
        person.save();
        return redirect(routes.Application.index());
    

    ...

在控制器中,当“添加人员”按钮被点击时,函数 addPerson 被调用。 person 对象从 Form.form(Person.class).bindFromRequest().get(); 返回。问题是返回的person 对象中的name 属性为空。

有人知道代码有什么问题吗?

【问题讨论】:

您是否将Person 传递回视图? 我不太明白你的意思,代码还是原封不动的,我没有改变它们的任何部分。我在 Eclipse 中使用调试器检查过,Person.name 为空。 我过去只使用过 Scala 游戏,所以我在这里继续记忆。您是否尝试过输入的名称Person.name?另外,你用的是什么版本的play? 2.x.x? 你输入的名字是什么意思?我正在使用最新版本的激活器(1.2.10)。所以我猜Play肯定是v2。 我刚刚查明原因,是Eclipse的自动构建搞乱了代码生成。 【参考方案1】:

刚刚发现这个answer。

事实证明,Eclipse 的自动构建会干扰字节码的生成。

这就是我收拾烂摊子的方法:

在 Eclipse 中,取消选中:项目 -> 自动构建 在项目文件夹的激活器控制台中,输入命令:clean 输入命令:编译 输入命令:运行

【讨论】:

我正在使用 IntelliJ,但仍然面临这个问题!有什么可能的解决办法吗?

以上是关于只是尝试播放框架,提交表单的值为空的主要内容,如果未能解决你的问题,请参考以下文章

提交后表单不为空字段

提交后如何使表单域为空

提交表单时对表单元素的引用为空

php一个表单提交多个页面,怎样获取按钮提交过来的值

怎么判断int类型的数值是不是为空?

表单提交后重置textarea的值