jakarta.faces.view.ViewScoped に置き換えられました。この対応するアノテーションの機能はこれと同じですが、CDI カスタムスコープとして実装されています。@RetentionSE(valueSE=RUNTIMESE) @TargetSE(valueSE=TYPESE) @InheritedSE @DeprecatedSE public @interface ViewScoped
ManagedBean と一緒にこのアノテーションは、クラスで発見された場合 <managed-bean-scope>view<managed-bean-scope> 要素は、対応する管理 Bean のために宣言されたかのように、ランタイムは行動しなければなりません。
ProjectStage が ProjectStage.Production でない場合は、現在の UIViewRoot の transient プロパティが true に設定されていないことを確認してください。その場合、ビューが一時的としてマークされていると @ViewScoped Bean が機能しないことを示して、現在の viewId の FacesMessage を FacesContext に追加します。また、Level.WARNING メッセージをログに記録します。ProjectStage が ProjectStage.Production の場合 は、この検証を行わないでください。
Bean は、jakarta.faces.component.UIViewRoot.getViewMap(boolean) から返されたマップに格納する必要があります。
ランタイムは、スコープの開始時と終了時にそれぞれ PostConstruct または PreDestroy でアノテーションが付けられた Bean のメソッドが呼び出されるようにする必要があります。2 つの状況により、スコープが終了する可能性があります。
FacesContext.setViewRoot() が呼び出され、新しい UIViewRoot は現在のものとは異なります。
Bean の作成時にたまたまアクティブだったセッションが期限切れになります。Bean の作成時にセッションが存在していなかった場合、この状況は当てはまりません。
セッションの有効期限の場合、ランタイムは、@PreDestroy アノテーション付きメソッドの処理中に呼び出された場合、FacesContext.getCurrentInstance() が有効なインスタンスを返すことを確認する必要があります。この状況での呼び出しに有効な FacesContext の一連のメソッドは、「アプリケーションの起動時またはシャットダウン時にこのメソッドを呼び出すことが有効」として記載されているものと同じです。その FacesContext から返された ExternalContext では、「アプリケーションの起動時またはシャットダウン時にこのメソッドを呼び出すのに有効」と記載されているすべてのメソッドを呼び出すことができます。さらに、メソッド ExternalContext.getSessionMap() も呼び出すことができます。
Copyright © 2018,2020 Eclipse Foundation.
Use is subject to license terms.