簡體   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