2012-08-26 6 views
6

私はPlay2を初めて使っています(私は既にPlay1を使ってプロジェクトを開発しています)、リクエストからのフォームバインディングに問題があります。 フォームに関するドキュメントは本当に軽いです。ここでPlay Framework 2リクエストからのバインドフォーム

は私のコントローラのコードです:

private final static Form<Estimation> estimationForm = form(Estimation.class); 

/** 
* Get an estimation by form 
* @return 
*/ 
public static Result estimation() { 
    return ok(views.html.rate.estimation.render(
     estimationForm, 
     City.findAll() 
    )); 
} 

/** 
* Display estimation results 
* @return 
*/ 
public static Result results() { 
    if (request().method().equals("POST")) { 
     Form<Estimation> form = estimationForm.bindFromRequest(); 
     if (form.hasErrors()) { 
      System.out.println(form.errorsAsJson().toString()); 
      return ok(views.html.rate.estimation.render(
       form 
       City.findAll() 
      )); 
     } 
     else { 
      System.out.println(form.get()); 
      return ok(views.html.rate.results.render(

      )); 
     } 
    } 
    else { 
     return estimation(); 
    } 
} 

は、私がこのように選択中の都市を表示:

<select id="city" name="city">  
    <option value="1">Paris, France</option> 
    <option value="2">Lyon, France</option> 
    <option value="3">Marseille, France</option> 
    <option value="4">Barcelona, Spain</option> 
    <option value="5">Berlin, Germany</option> 
</select> 

私がフォームを送信すると、私は次のエラーを持っている: {」

これは私の質問です。バインダーは単純なフィールド(たとえば、モデルのStringプロパティ)ではうまくいくようですが、@ManについてはどうでしょうかyToOneの関係は?

ありがとうございます。

答えて

9

選択フィールドの名前をname="city.id"と設定してください。

+0

ありがとうございます。私はあなたの言ったように私のコードを変更しましたが、それは良くありません。私はform.toString()を印刷するとき、これは私が持っているものです: フォーム(of = class models.analytic.Estimation、data = {amount = 125、city.id = 1}、value = Some(null >> 125.0) 、errors = {}) 私はオブジェクト(form.get())を保存しようとすると、CityフィールドにNotNull制約の検証エラーが発生しました... もう一度ありがとうございます;) – c4k

+0

申し訳ありませんより多くの調査の後、あなたの答えは私の問題を解決します。実際には、私は直接form.get()オブジェクトを保存しようとしましたが、値が常にnullになるように、フォームには必要なく、フォームにないフィールドがあります。 エンティティを保存する前にコントローラのこのフィールドを設定することで問題を解決しました(この問題を抱えている人を助けることができる場合) – c4k