繁体   English   中英

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

[英]bindFromRequest() not working in play framework 2.0. Form values are always null

问题是,我无法在 play framework 2.0 中读取提交表单中的值。 该值始终为 null,

这是我的代码:

我的 model 文件

 package model;

 public class Paper {
    public String query;
 }

我的指数.scala.html

@(myform: Form[model.Paper])

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

会议/路线

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

我的申请.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。

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

感谢帮助!

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

@(myform: Form[model.Paper])

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

我使用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

我什至在 2022 年就遇到过这个问题。

我使用的是 2.8.x 版,这是我找到的解决方案。

情况1。

如果你的model里面写了setter ,有setter的字段会自动填充,应该没有问题。

案例 2。

如果您的model中没有设置器,则应使用以下行: Form.form(Paper.class).withDirectFieldAccess(true).bindFromRequest(reqeust);

position 放在withDirectFieldAccess(true)的位置在 2.8.x 版本中很重要,您还必须将request object 作为参数传递。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM