Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java bindFromRequest()在play framework 2.0中不工作。表单值始终为空_Java_Playframework_Playframework 2.0 - Fatal编程技术网

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

Java bindFromRequest()在play framework 2.0中不工作。表单值始终为空,java,playframework,playframework-2.0,Java,Playframework,Playframework 2.0,问题是,我无法在PlayFramework2.0中读取提交表单中的值。该值始终为空 这是我的密码: 我的模型文件 my index.scala.html my Application.java 公共静态结果索引(){ 纸张=新纸张(); paper.query=“初始值”; 表单paperForm=表单。表单(纸。类)。填写(纸); 返回ok(索引渲染(纸质); } 公共静态结果newPaper(){ Form paperForm=Form.Form(Paper.class).bindFromR

问题是,我无法在PlayFramework2.0中读取提交表单中的值。该值始终为空

这是我的密码:

我的模型文件 my index.scala.html my Application.java
公共静态结果索引(){
纸张=新纸张();
paper.query=“初始值”;
表单paperForm=表单。表单(纸。类)。填写(纸);
返回ok(索引渲染(纸质);
}
公共静态结果newPaper(){
Form paperForm=Form.Form(Paper.class).bindFromRequest();
如果(!paperForm.hasErrors()){
Paper Paper=paperForm.get();
Logger.info(“query=“+paper.query”);//为什么我总是得到“query=null”???
}
返回重定向(routes.Application.index());
}
当我访问html页面时,在文本输入框中看不到“初始值”。当我填写输入框并单击提交按钮时,打印的日志始终为:
query=null

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

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


谢谢您的帮助!

您还需要在带有value post的表单标记中指定method属性。但是helper方法不支持method属性。所以请这样做

@(myform: Form[model.Paper])

<form method="POST" action ="@routes.Application.newPaper()"> 
   query:  @helper.inputText(myform("query"))  <br><br>
   <br><input type="submit">
</form>
@(myform:Form[model.Paper])
查询:@helper.inputText(myform(“查询”))



我使用了
表单工厂
而不是
表单

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

因此,您的代码应该是:

Form<Paper> paperForm = Form.form(Paper.class).bindFromRequest().withDirectFieldAccess(true);
formpaperform=Form.Form(Paper.class).bindFromRequest().withDirectFieldAccess(true);
而不是:

Form<Paper> paperForm = Form.form(Paper.class).bindFromRequest();
formpaperform=Form.Form(Paper.class).bindFromRequest();
通过这个你可以得到所有的字段。 您可以在此链接上找到更多帮助-

方法
属性由
操作
属性中使用的
路由
确定,无需手动使用。最好在调试工具的网络选项卡中检查它调用的方法。我之前也遇到过同样的问题,默认情况下它使用GET方法进行调用。我监控了http请求并确认了它正在发送POST请求。但最终状态代码是303。不确定为什么状态代码不是200?如果再次给出303,请在action属性中指定值“/newkey”,而不是反向路由。然后与一些rest客户端(如POSTMAN)一起尝试此API。请让我知道结果,也许我可以进一步帮助您。
  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()); 
 }
@(myform: Form[model.Paper])

<form method="POST" action ="@routes.Application.newPaper()"> 
   query:  @helper.inputText(myform("query"))  <br><br>
   <br><input type="submit">
</form>
Form<Paper> paperForm = Form.form(Paper.class).bindFromRequest().withDirectFieldAccess(true);
Form<Paper> paperForm = Form.form(Paper.class).bindFromRequest();