[解決済み] ViewParam vs @ManagedProperty(value = "#{param.id}")
質問
View Paramsをこのように定義すると、どのような違いがあるのでしょうか。
<f:metadata>
<f:viewParam name="id" value="#{someBean.id}"/>
</f:metadata>
そして、このようにManagedBeanにプロパティを定義します。
@ManagedProperty(value = "#{param.id}")
private Integer id;
どのように解決するのですか?
<f:viewParam>
:
-
モデル値の更新フェーズの間だけ値を設定する(このモデルは
UIInput
). -
の間は設定値が利用できません。
@PostConstruct
の間に利用することはできませんので<f:event type="preRenderView" listener="#{bean.init}" />
の中に<f:metadata>
の中で、設定された値に基づいて初期化/プリロードを行うことができます。JSF 2.2 以降では<f:viewAction>
を使うことができます。 -
ネストされた
<f:converter>
と<f:validator>
で、より細かい変換・検証を行うことができます。さらに<h:message>
を付けることができる。 -
GET のクエリ文字列として
includeViewParams
属性を使って<h:link>
またはincludeViewParams=true
のいずれかのリクエストパラメータを指定します。 -
で使用することができます。
@RequestScoped
ビーンに使用できますが、そのビーンは@ViewScoped
で囲まれているフォームによって引き起こされる検証の失敗を ビューパラメータで乗り切りたいのなら、そうでなければ、 それ以降のリクエストのためにすべてのリクエストパラメータを 手動で<f:param>
によって手動で保持する必要があります。
例 :
<f:metadata>
<f:viewParam id="user_id" name="id" value="#{bean.user}"
required="true" requiredMessage="Invalid page access. Please use a link from within the system."
converter="userConverter" converterMessage="Unknown user ID."
/>
</f:metadata>
<h:message for="user_id" />
で
private User user;
と
@FacesConverter("userConverter")
. でページを呼び出す
http://example.com/context/user.xhtml?id=123
を渡すと
id
パラメータをコンバータに渡し
User
オブジェクトをビーンプロパティとして設定します。
@ManagedProperty
:
-
ビーン構築直後の値を設定します。
-
設定された値は
@PostConstruct
で、設定された値に基づいて他のプロパティの初期化/プリロードを簡単に行うことができます。 -
ビューで宣言的な変換/検証を許可しない。
-
の管理されたプロパティは
#{param}
はリクエストスコープよりも広いスコープを持つビーンでは使用できないため、ビーンには@RequestScoped
. -
のマネージドプロパティに依存する場合
#{param}
が後続の POST リクエストに存在することに依存している場合、 そのプロパティを<f:param>
として含める必要があります。UICommand
コンポーネントで構成されます。
例 :
@ManagedProperty("#{param.id}")
private Long id;
private User user;
@EJB
private UserService userService;
@PostConstruct
public void init() {
user = userService.find(id);
}
しかし
user
が
null
をいじって
FacesContext#addMessage()
とかでいいんじゃない?
あなたは
できます
の両方がある場合、両方を使うことができます。
@PostConstruct
と
includeViewParams
は必須です。きめ細かい変換・検証を適用することができなくなるだけです。
こちらもご覧ください。
関連
-
[解決済み] java.lang.ClassNotFoundException: javax.servlet.jsp.jstl.core.Config [duplicate].
-
[解決済み] p:dashboardが終了してもソート順を維持する。
-
[解決済み] actionとactionListenerの違い
-
[解決済み] ビーンスコープを正しく選ぶには?
-
[解決済み】JSFリソースライブラリは何のためにあり、どのように使用すべきですか?
-
[解決済み】JSF 2.0 Faceletsを使用してXHTMLに別のXHTMLを含めるにはどうすればよいですか?
-
[解決済み] JSF2 FaceletsでJSTL...意味があるのか?
-
[解決済み] javax.el.PropertyNotFoundException の識別と解決。ターゲットに到達できない
-
[解決済み] divタグをレンダリングできるjsfコンポーネントは何ですか?
-
[解決済み] Backing Bean (@ManagedBean) か CDI Beans (@Named) か?
最新
-
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: ビューを復元できませんでした
-
[解決済み] <f:facet>は何をするもので、どのような場合に使用するのですか?
-
[解決済み] javax.validation.ConstraintViolationException
-
[解決済み] ビーンスコープを正しく選ぶには?
-
[解決済み] JSF2 FaceletsでJSTL...意味があるのか?
-
[解決済み] <f:metadata>、<f:viewParam>、<f:viewAction>は何に使えるのでしょうか?
-
[解決済み] h:commandLinkの代わりにh:outputLinkを使うべきですか?
-
[解決済み] サーブレット関連クラスでJSFマネージドBeanを名前付きで取得する
-
[解決済み] dataTableやui:repeatのコマンドリンクに選択した行を渡すにはどうしたらいいですか?
-
[解決済み] f:viewAction / preRenderView と PostConstruct はいつ使うのか?