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の関係は?
ありがとうございます。
ありがとうございます。私はあなたの言ったように私のコードを変更しましたが、それは良くありません。私はform.toString()を印刷するとき、これは私が持っているものです: フォーム(of = class models.analytic.Estimation、data = {amount = 125、city.id = 1}、value = Some(null >> 125.0) 、errors = {}) 私はオブジェクト(form.get())を保存しようとすると、CityフィールドにNotNull制約の検証エラーが発生しました... もう一度ありがとうございます;) – c4k
申し訳ありませんより多くの調査の後、あなたの答えは私の問題を解決します。実際には、私は直接form.get()オブジェクトを保存しようとしましたが、値が常にnullになるように、フォームには必要なく、フォームにないフィールドがあります。 エンティティを保存する前にコントローラのこのフィールドを設定することで問題を解決しました(この問題を抱えている人を助けることができる場合) – c4k