2011-07-28 17 views
3

私はしばらくの間、バインディングフレームワークを使用してきました。このケースをどのように処理するかを知りたいと思います。バインディングフレームワークを効率的に使用する方法

あなたはあなたのビューで

  • (String)を見出し
  • (Boolean)を公開し
  • (日)publishmentDate

のようないくつかの属性を持っている新聞を持って、あなたが持っています同じ時間に編集することができるよりも新聞のリストです。つまり、すべての新聞の見出しを変更することも、すべての新聞の状態を1回のリクエストで「公開」することもできます。

問題は、バインディングフレームワークを使用しているため、DB内のデータを編集している場合と同じように、新聞のデータを編集するということです。 。

しかし、私がしたいのは、私が新聞を出版するときに、publishmentDateが現在の日付に更新されるということです。 フォームにpublishmentDateフィールドを置くことも、現在の日付に設定された隠しフィールドにすることもできますが、これはクリーンでも安全でもありません。フラグをtrueに設定するだけでなく、publishmentDate更新します

私はそれはアクションが(公開持つ方が良いと思います)(必要に応じて、その他のロジックを...)

私はちょうどあなたがそのハンドルはどうすればよいだろう?

私が見と異なるアプローチについて考えてきました:


1)時には、我々は既存の永続ORMエンティティに新しいパラメータをバインドします。 これは、バインディングの直前にエンティティを取得し、その値を既存の「すでに埋め込まれている」エンティティオブジェクトにバインドすることを意味します。これは「エンティティの水和」と呼ばれることがあります。 「公開アクション」を起動する必要があるかどうかを知る唯一の方法は、古いフィールドと新しいフィールドを比較することで、編集されたかどうか、 false-> true = publish) ORMリスナー(@PostLoad、Hibernate Interceptor/EventListenerなど)を使用して、必要な「バインド前」の値を保持することができます。

これはうまくいきますが、バインディングが公開済みのフラグをtrueに設定している間は、ビークルで公開アクションを開始するのはかなり奇妙です。


2)これは、ユーザーが新聞を発行したい表しexempleフラグのために...他のフラグを使用するが、ほぼ同じことを行うことが可能です。 これまでの値と比較する必要はなく、新聞を公開してからアクションを開始するかどうかをチェックするだけです(実際に公開されたフラグは、時間...)

バインドフレームワークを使用しているので、既に公開されている新聞については、公開されているチェックボックスを表示する必要があります。 バインディングの属性がpublished_wishになっている場合は、値を設定するか、チェックボックスをすべてオフにする必要があります。 これは、ビューを表示する前に、published_wish = publishedのようにすることを意味します。 ほとんどの場合、wishフラグは保持されませんが、「wish」が保持されなければならない場合があります。 published_wish =


3を発表)を行うためには、空の非を使用して結合するために実体を持続し、その後、この非の値を再度コピーリアルにエンティティを永続化オブジェクトを持続しました。 あなたが他の1つのオブジェクトから値を再コピーする場合ので、あなたはすべてのものをカスタマイズし、あなたが望む任意のアクションを起動することができます... しかし、それはすべてのこれらのパラメータを再コピーする必要が少し重いです...


他の方法があるかもしれません...

どうしますか?それだけではうまくいきませんが、それはまたエレガントな、整備可能な ...私はここに完璧な解決策が表示されません

+0

誰もそれについて考えていませんか? –

+0

誰もそれについての意見はありませんか?恩恵を受けても –

+2

私は知らない。それはあまりにもオープンなので、おそらく。 StackoverflowはQ&Aサイトであり、ディスカッションフォーラムではありません。私はCtrl + Wを3回または4回のパラグラフを読んだ後に押して、残りのものを無視しました。 – BalusC

答えて

1

私はあなたに同意します。また、この場合は「公開」ボタンを使用して、複数の記事を選択してまとめて公開することもできます。公開されたチェックボックスと公開日を直接編集することはできません。

0

質問は私を非常によく開きませんが、その場合あなたはエレガントに公開日を保存したいのですが、なぜあなたにデータベースを残しておかないといけないのですか? Mysqlにはhereの例があります。ここでデータベースはlastChangedのデータを自動的に保存します。

また、database triggersがあなたのために作れるかもしれません。少なくとも私は正確なデータベースのクエリをより良いソリューションを参照してくださいそれらのことを作るコード内のハッキングの束よりも参照してください。

あなたの質問や正しい質問を念頭に置いてお答えいただければ幸いです。

+0

DBベンダー独自のものを使用しないことはアーキテクチャ上の選択です。 –

+0

であり、publishmentDateの更新はここでは簡単なケースです。私はORMリスナーでも処理できます(JPA/EJB3ではPostLoadのようにバインド直前の値をコピーし、PrePersist PreUpdateはバインド後の値を比較し、パブリケーションを検出してから日付を更新する前に考える) )。実際には、これらの「リンクされた更新」は今のところ日付を設定するだけでなく、ビジネスコードが必要な場合があります... –

関連する問題