![](/img/trans.png)
[英]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.