bindFromRequest()在play framework 2.0中不起作用。表单值始终为null

时间:2015-05-07 08:26:09

标签: java playframework playframework-2.0

问题在于,我无法在play framework 2.0中以提交的形式阅读值。该值始终为null,

这是我的代码:

我的模型文件

 package model;

 public class Paper {
    public String query;
 }

my index.scala.html

@(myform: Form[model.Paper])

@helper.form(action =routes.Application.newPaper()) {
   myvalue:  @helper.inputText(myform("query"))  <br><br>
   <br><input type="submit">
}

CONF /路由

 POST     /newkey                  controllers.Application.newPaper()
 GET     /                           controllers.Application.index()

我的Application.java

  public static Result index() {
    Paper paper = new Paper();
    paper.query = "initial value";
    Form<Paper> paperForm =  Form.form(Paper.class).fill(paper);
    return ok(index.render(paperForm);
  }

  public static Result newPaper() {
    Form<Paper> paperForm = Form.form(Paper.class).bindFromRequest();
    if (!paperForm.hasErrors()) {
        Paper paper = paperForm.get();
        Logger.info("query= " + paper.query); //why I always get "query= null" ???
    }
    return redirect(routes.Application.index()); 
 }

当我访问html页面时,我无法在文本输入框中看到“初始值”。当我填写输入框并单击“提交”按钮时,打印的日志始终为:query= null

我还使用chrome devtool进行监控。我看到发送了http请求。但最终状态代码是303,而不是200。

如果我使用DynamicForm在newPaper()中处理提交的表单,那么我可以按预期读取查询值。但为什么当前的代码不起作用?

感谢您的帮助!

2 个答案:

答案 0 :(得分:0)

您还需要在带有值post的表单标记中指定方法属性。但是辅助方法并不支持方法属性。所以这样做。

@(myform: Form[model.Paper])

<form method="POST" action ="@routes.Application.newPaper()"> 
   query:  @helper.inputText(myform("query"))  <br><br>
   <br><input type="submit">
</form>

答案 1 :(得分:0)

我用formFactory代替了Forms

.withDirectFieldAccess(true);中为myApplication.java添加bindFormRequest

因此您的代码应为:

Form<Paper> paperForm = Form.form(Paper.class).bindFromRequest().withDirectFieldAccess(true);

代替:

Form<Paper> paperForm = Form.form(Paper.class).bindFromRequest();

通过此操作,您可以获取所有字段。 您可以在此链接上找到更多帮助- https://www.playframework.com/documentation/2.7.x/JavaForms