[英]Play Framework - How to fix troubleshootings about NULL values with bindFromRequest() and get() methods
[英]bindFromRequest() not working in play framework 2.0. Form values are always null
问题是,我无法在 play framework 2.0 中读取提交表单中的值。 该值始终为 null,
这是我的代码:
package model;
public class Paper {
public String query;
}
@(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()
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 版,这是我找到的解决方案。
如果你的model里面写了setter ,有setter的字段会自动填充,应该没有问题。
如果您的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.