0

faces-config.xml で宣言され、JSF 1.2 で 2 つの異なるマネージド Bean スコープを持つ 2 つの Java Bean に関する質問があります。まず、私が今抱えている問題について説明したいと思います。

Javaシステムから別のシステムに情報をエクスポートする可能性があります(データの詳細とその具体的な転送方法はそれほど重要ではないと思います)。

私の意見では、そのエクスポートをトリガーするJava BeanにはマネージドBeanスコープ「セッション」があることが重要です。データ エクスポートはシステムのバックグラウンドで動作し、このセッション スコープが必要です。

ユーザーは、jsf / xhtml ページで、エクスポートが開始されたという情報を確認できます。具体的な問題は次のとおりです。

<ui:repeat value="#{adminArea.informationForExport}" var="info">
    <h:outputText value="#{info}" />
</ui:repeat>

この情報は毎回 HTML DOM の一部であり、ユーザーが私のシステムで別の xhtml ページを見て、この xhtml ページに戻ってデータのエクスポートを開始できる場合、消えることはありません。

私の Bean「adminArea」は、faces-config.xml でマネージド Bean スコープ「session」で宣言され、データ エクスポート用の Java コードを実装しました。

<managed-bean>
    <managed-bean-name>adminArea</managed-bean-name>
    <managed-bean-class>resources.adminArea</managed-bean-class>
    <managed-bean-scope>session</managed-bean-scope>
</managed-bean>

宣言された Bean「adminArea」は、マネージド Bean スコープ「request」である Bean「newCalculation」のマネージド プロパティとして参照されました。

<managed-bean>
    <managed-bean-name>newCalculation</managed-bean-name>
    <managed-bean-class>resources.calculation</managed-bean-class>
    <managed-bean-scope>request</managed-bean-scope>        
    <managed-property>
        <property-name>adminArea</property-name>
        <value>#{adminArea}</value>
    </managed-property>     
</managed-bean>

この Bean にはマネージド Bean スコープ「リクエスト」が必要です。

Bean「adminArea」のマネージドBeanスコープを「セッション」から「リクエスト」に変更する唯一の方法はありますか? しかし、それは私のデータ エクスポートがバックグラウンドで動作しないという問題を引き起こします。

または、この問題を他の楽器で解決できますか?

グリーツ・マーウィード

4

1 に答える 1

1

最終的な答え:

  1. JSF 2.0 に移行します。ここで説明する多くの便利な機能があります。
  2. 特定のページに特定の情報を表示したい場合は、ビュー スコープを使用してみてください。Request スコープと View スコープの違いについては、こちらをご覧ください。ユーザー インターフェイスをビュー スコープ Bean に直接リンクしてみてください。ManagedProperty インジェクションによって受け取ることができるすべてのセッションまたはアプリケーション情報。
  3. xml 構成の Bean を拒否して、アノテーションに移行することをお勧めします。ここで読むことができることについての良いコメント。
  4. JSFのバックグラウンド処理について。これらは通常、エンタープライズ Java Bean (EJB) によって実行されます。EJB 3 とおそらくTimer Serviceを見てください。
于 2013-11-27T07:34:06.257 に答える