0

CRUD 操作の実装についてサポートが必要です。アプリケーションにオブジェクトのテーブルが含まれています。各オブジェクトは、プロパティ (値) のリストによって記述されます。プロパティ タイプに応じて、1 つのプロパティがカスタム JSF エディタで変更されます。

ユーザーが新しいアカウントを追加すると、編集者のリストがオブジェクトのタイプから決定され、custom:includeタグを使用してフォームに表示されます。このカスタム タグは、エディタを動的に含めるために使用されます<custom:include src="#{editor.component}">。component プロパティは、JSF エディターの場所を指します。

すべてのエディターには、インターフェースを実装し、クラスValueHolderを継承するマネージド Bean があります。AbstractEditorAbstractEditor にはupdateEditorメソッドが含まれています。

public interface ValueHolder {  
    String EDITOR_VALUES = "editorValues";  
    public Object getValue();  
} 

エディター名をキー、エディター値を値として、セッション マップを使用します。ユーザーがプロパティを変更すると、 updateEditor メソッドが呼び出され、エディターの新しい値でマップが更新されます。

問題は、エディターの背後にある Bean のスコープにあります。@SessionScoped Bean を使用すると、エディターを初期化するコードが再度呼び出されず、追加/編集アクションを処理できません。@SessionScoped は、追加に対してのみ機能します。@RequestScoped を試してみましたが、Bean が頻繁に呼び出され、それが本当に良いかどうかわかりません。

ナビゲーションには JSF2、PrimeFaces 3.0.M4、および Spring Web Flow を使用しています。

4

2 に答える 2

1

@ViewScoped豆の使用を見たことがありますか?同じページに戻り続ける限り、ビュー スコープ Bean はスコープ内に残ります。これはあなたがしていることのように見えます。

または、CDI を使用@ConversationScopedしている場合は、更新中に Bean をスコープ内に保持するために使用できます。これには明確な始まりと終わりがあります。これにより、Bean がいつスコープ外になるかを判断できます。

于 2012-05-14T18:07:49.783 に答える
0

@SessionScoped豆を保管しています。Bean の名前はセッションに保存されており、エディターのファイル名と同じ名前です。このようにして、エディターと Bean の間に関連付けが行われます。

インターフェイスに初期化メソッドが追加されました。ValueHolderこのメソッドは、オブジェクトが追加または変更されたときに呼び出されます。

于 2012-05-16T18:39:27.403 に答える