javax.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 は、javax.faces.component.UIViewRoot.getViewMap(boolean)
から返されたマップに格納する必要があります。
ランタイムは、スコープの開始時と終了時にそれぞれ PostConstruct
または PreDestroy
でアノテーションが付けられた Bean のメソッドが呼び出されるようにする必要があります。2 つの状況により、スコープが終了する可能性があります。
FacesContext.setViewRoot()
が呼び出され、新しい UIViewRoot
は現在のものとは異なります。
Bean の作成時にたまたまアクティブだったセッションが期限切れになります。Bean の作成時にセッションが存在していなかった場合、この状況は当てはまりません。
セッションの有効期限の場合、ランタイムは、@PreDestroy
アノテーション付きメソッドの処理中に呼び出された場合、FacesContext.getCurrentInstance()
が有効なインスタンスを返すことを確認する必要があります。この状況での呼び出しに有効な FacesContext
の一連のメソッドは、「アプリケーションの起動時またはシャットダウン時にこのメソッドを呼び出すことが有効」として記載されているものと同じです。その FacesContext
から返された ExternalContext
では、「アプリケーションの起動時またはシャットダウン時にこのメソッドを呼び出すのに有効」と記載されているすべてのメソッドを呼び出すことができます。さらに、メソッド ExternalContext.getSessionMap()
も呼び出すことができます。
Copyright © 2019 Eclipse Foundation.
Use is subject to license terms.