再生 "未解決のパラメータは安全に無視されます。タイプの不一致も無視されます。" POJOにパラメータをバインドするとき。ほとんどの場合、これは非常に効果的です。POJO、JPAのバインドとチェックボックス
しかし、このチェックボックスをオンにすると、パラメータリストにチェックマークが付いていないチェックボックスが送信されないため、チェックボックスに問題が発生します。
CRUDモジュールは、チェックボックスの直後に隠れた入力フィールドを挿入することでこれを解決しました。これは、Playがバインドする2つの同一パラメータのうちの最初のものだけを読み込むためです。
チェックボックスを表示するCRUDモジュールからソース:
<input id="object_isInvoiceable" type="checkbox" name="object.isInvoiceable" />
<input type="hidden" name="object.isInvoiceable" value="false" />
別の方法は、オブジェクトのメンバーとしてではなく別のパラメータとしてチェックボックスを通過しないことです。
<input id="object_isInvoiceable" type="checkbox" name="isInvoiceableExtraParamFromHell" />
とコントローラで:どのようにすることができますので、
public static void save(Event object, Boolean isInvoiceableExtraParamFromHell) {
if(isInvoiceableExtraParamFromHell == null) {
object.isInvoiceable = false;
}
else {
object.isInvoiceable = true;
}
... validation etc ...
object.save();
... render etc ...
}
私は代替1を好きではないこのように、コントローラでこれをキャッチし、そこobject.memberを設定することが可能ですすべてのブラウザでparamsの順序が正しく送信されていることを確認してください。
オブジェクトを変更すると、別のパラメータを管理してコントローラメソッドを変更する必要があるため、代替2が嫌いです。
これを行うにはいくつかの方法がありますか?私はPlay Frameworkの新機能ですから、Annotationなどを見逃したかもしれません。
編集:
以前は少し不明でした。問題は新しいオブジェクトを作成するときではなく、CodemwnciのようにFALSEに設定することができます。問題は、既存のJPAオブジェクトにバインドする場合です。 playframework tutorialから
:
あなたは自動的にJavaバインディングにHTTPを使用してJPAオブジェクトをバインドすることができます。
HTTPパラメータでuser.idフィールドを自分で指定することができます。 Playはidフィールドを見つけたら、それを編集する前にデータベースから一致するインスタンスをロードします。次に、HTTP要求によって提供される他のパラメータが適用されます。だからあなたはそれを直接保存することができます。
この場合、メンバー値はデフォルト値に設定されません。
例として、データベースにJPAオブジェクトが既に格納されています。このオブジェクトには、isInvoiceableがTRUEに設定されています。このオブジェクトをテンプレートにレンダリングします。チェックボックスをオフにすると、パラメータは送信されないので、isInvoiceableは引き続きtrueになります。新しいオブジェクトの場合
ありがとうございました。残念ながら、これは既に格納されているJPAオブジェクトでは機能しません。私は私のポストでは少し不明で、それを編集しました。 – Franz
ありがとうございます。合理的な回避策のようです。もう一つは、はい/いいえなどの選択ボックスだけを置くことです。 – Franz