问题在于,我无法在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。
如果我使用DynamicForm在newPaper()中处理提交的表单,那么我可以按预期读取查询值。但为什么当前的代码不起作用?
感谢您的帮助!
答案 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