[解決済み] f:viewAction / preRenderView と PostConstruct はいつ使うのか?
質問
どのような場合に
f:viewAction
または
preRenderView
イベントを使ってページのデータを初期化するのと
@PostConstruct
アノテーションを使うのとでは、どちらがいいのでしょうか?どちらかを使用する根拠は、バッキングビーンのスコープのタイプに基づくものでしょうか。
@RequestScoped
であれば
f:viewAction
または
preRenderView
以上
@PostConstruct
を使用して、ビューをレンダリングする前にバッキングビーンを初期化することは、2つが同じ効果をもたらすので、無関係でしょうか?
f:viewAction または preRenderView
<f:metadata>
<f:viewAction action="#{myBean.initialize}" />
</f:metadata>
<f:metadata>
<f:event type="preRenderView" listener="#{myBean.initialize}"/>
</f:metadata>
または
ポストコンストラクト
public class MyBean
{
@PostConstruct
public void initialize()
{
}
}
どのように解決するのですか?
<ブロッククオートf:viewAction または preRenderView イベントを使用して、@PostConstruct アノテーションを使用してページ詩のデータを初期化するには、どのような場合に使用する必要がありますか。
この場合
<f:viewAction>
を使うことで、HTML がレンダリングされる前にメソッドを実行することができます。で設定されたモデルの値に基づいてアクションを実行したい場合に特に便利です。
<f:viewParam>
によって設定されたモデル値に基づくアクションを実行したい場合に特に有用です。すなわち、これらのメソッドは、モデル値を更新した瞬間に
@PostConstruct
が実行されます。JSF 2.0/2.1 では、このタグは存在しなかったので、このタグを使うには
preRenderView
を使用する必要があります。
バッキングビーンが @RequestScoped である場合、これらは事実上まったく同じことをするのでしょうか。(そして、それは開発者の選択次第なのでしょうか? (@PostConstructは"clean"のようです。).
いいえ、それらは間違いなく効果的に同じことをするわけではありません。その
@PostConstruct
はアクションを実行するように意図されています
直接
のようなビーンの構築と注入されたすべての依存関係や管理されたプロパティの設定の後,直接的に
@EJB
,
@Inject
,
@ManagedProperty
など。すなわち、注入された依存関係は、Bean のコンストラクタの内部では利用できません。したがって、Bean がビュー、セッション、アプリケーションのいずれかにスコープされている場合、これはビュー、セッション、アプリケーションごとに一度だけ実行されます。このとき
<f:viewAction>
は、デフォルトでは最初の GET リクエストでのみ呼び出されますが
onPostback="true"
属性を使ってポストバックリクエストでも実行されるように 設定することができます。また
preRenderView
イベントはすべての HTTP リクエストで起動されます (そう、これには ajax リクエストも含まれます!)。
要約すると
@PostConstruct
によって設定された注入された依存関係や管理されたプロパティに対してアクションを実行したい場合は
@EJB
,
@Inject
,
@ManagedProperty
などをビーンの構築時に使用します。使用方法
<f:viewAction>
もし
また
で設定されたプロパティに対してアクションを実行したい場合
<f:viewParam>
. まだJSF 2.0/2.1を使っている場合は
preRenderView
の代わりに
<f:viewAction>
. 必要であれば
FacesContext#isPostback()
を実行するために
preRenderView
アクションを実行します。
も参照してください。
関連
-
[解決済み] javax.faces.application.ViewExpiredException: ビューを復元できませんでした
-
[解決済み] java.lang.ClassNotFoundException: javax.faces.webapp.FacesServlet
-
[解決済み] ビーンスコープを正しく選ぶには?
-
[解決済み】PrimeFacesのprocess/updateとJSFのf:ajax execute/renderの属性を理解する。
-
[解決済み] Java EE / JSF で j_security_check を使用してユーザー認証を行う。
-
[解決済み] <f:metadata>、<f:viewParam>、<f:viewAction>は何に使えるのでしょうか?
-
[解決済み] divタグをレンダリングできるjsfコンポーネントは何ですか?
-
[解決済み] Backing Bean (@ManagedBean) か CDI Beans (@Named) か?
-
[解決済み] PrimeFaces p:fileUploadを使うには?リスナーメソッドが呼び出されない、またはUploadedFileがNullである / エラーが発生する / 使えない
-
[解決済み] dataTableやui:repeatのコマンドリンクに選択した行を渡すにはどうしたらいいですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] javax.faces.application.ViewExpiredException: ビューを復元できませんでした
-
[解決済み] JSF 2.2でターゲットが到達できない、識別子がヌルに解決される [重複] 。
-
[解決済み] actionとactionListenerの違い
-
[解決済み] ビーンスコープを正しく選ぶには?
-
[解決済み】JSFリソースライブラリは何のためにあり、どのように使用すべきですか?
-
[解決済み】PrimeFacesのprocess/updateとJSFのf:ajax execute/renderの属性を理解する。
-
[解決済み] JSF2 FaceletsでJSTL...意味があるのか?
-
[解決済み] Java EE / JSF で j_security_check を使用してユーザー認証を行う。
-
[解決済み] <f:metadata>、<f:viewParam>、<f:viewAction>は何に使えるのでしょうか?
-
[解決済み] javax.el.PropertyNotFoundException の識別と解決。ターゲットに到達できない