2

struts 1.xでセッションスコープを持つフォームBeanを使用することの主な欠点は何ですか?

4

2 に答える 2

2

reset()フォームにチェックボックスから入力された属性が含まれている場合は、実装する必要があります。リクエストスコープのフォームBeanには必要ありません。

作成フォームを2回目に表示する場合は、フォームをデフォルト値にリセットする必要があります。そうしないと、作成フォームは最後に作成/更新されたオブジェクトからのデータを再表示します。

同じフォームを使用して2つのブラウザタブまたはフレームを使用することはできません。これらはお互いのつま先を歩くためです。

フォームBeanは、デフォルトでリクエストスコープに含まれている必要があります。

于 2012-11-26T12:42:53.110 に答える
0

両方のスコープで作業して、自分に適したスコープを選択してください。ただし、永続オブジェクト(およびHibernateなどのORMツール)を使用している場合は、リクエスト間でプロパティがデータベースに永続化されるという理由だけで、わずかな違いがあると言えます。

  1. 悪名高いチェックボックス(および対応するブールプロパティ)。永続オブジェクトを操作している場合(一部のエンティティのブールプロパティを編集している場合)、とにかくチェックボックスをリセットするには追加のコードが必要になります。ブールプロパティは永続的であるため、スコープは重要ではありません(リクエスト間で自動的にクリアされません)。

  2. 複雑な永続オブジェクト( Hibernateによって関連するデータベーステーブルのセットにマップされたオブジェクトの階層)を操作している場合、多くの場合、永続オブジェクトをform-b​​eanにネストし、ネストされたプロパティを使用します<html:text property="purchase.client.name" />(もちろん、ゲッターを作成できます)階層全体の各プロパティのform-b​​eanの/settersですが、これは面倒であり、さらなる開発を複雑にします)。purchase作成の場合は、form-b​​eanで新しい空のオブジェクトを作成します。エディションの場合はpurchase、データベースから既存のオブジェクトをロードします(編集の要求には、変更するオブジェクトの識別子が含まれます)。スコープは再び重要ではありません。

  3. 約2つのブラウザタブ。より重要で過小評価されている問題は、AJAX要求の使用で発生します。特に、べき等ではなく時間的に重複している場合(ブラウザーは、更新1の要求を発行し、次に更新2の要求を発行しますが、更新1はサーバーで処理されます)。非常に奇妙な設計(つまり、1人のユーザーからの1つのセッションで同時に更新要求をオーバーラップさせることを意味します)。はい、その場合、異なるリクエストでデータを分離する必要があります。しかし、さらに、action(Struts 1について話している場合)スレッドセーフである必要があります、およびビジネスロジックは、更新の同時/競合(同期の問題の解決、オブジェクトのロック、更新のマージ/オーバーライド/拒否など)の準備ができている必要があります。マルチユーザーアプリケーションを開発している場合、これは2人の異なるユーザーが同じオブジェクトを同時に変更したい場合にも発生する可能性があります。繰り返しますが、Beanスコープは、問題全体と比較してほとんど重要ではありません。

ご覧のとおり、セッションスコープのフォームBeanには1つだけ欠点があり、深刻な設計上の欠陥(1人のユーザーからの更新要求の重複)に関連してのみ発生します。

于 2012-11-30T07:37:02.203 に答える