このようにビューパラメータを定義することの違いは何ですか?
<f:metadata>
<f:viewParam name="id" value="#{someBean.id}"/>
</f:metadata>
そして、このようにManagedBeanでプロパティを定義します。
@ManagedProperty(value = "#{param.id}")
private Integer id;
このようにビューパラメータを定義することの違いは何ですか?
<f:metadata>
<f:viewParam name="id" value="#{someBean.id}"/>
</f:metadata>
そして、このようにManagedBeanでプロパティを定義します。
@ManagedProperty(value = "#{param.id}")
private Integer id;
<f:viewParam>:モデル値の更新フェーズでのみ値を設定します(拡張されるためUIInput)。
の間に設定値を使用できないため、設定値に基づいて初期化/プリロードを実行するには、内部に@PostConstruct追加の値が必要です。JSF 2.2以降、代わりにそれを使用できます。<f:event type="preRenderView" listener="#{bean.init}" /><f:metadata><f:viewAction>
ネストされ、よりきめ細かい変換/検証が可能に<f:converter>なり<f:validator>ます。でも<h:message>付けられます。
includeViewParams任意のURLの属性<h:link>またはincludeViewParams=trueリクエストパラメータを使用して、GETクエリ文字列として含めることができます。
Beanで使用できますが、ビューに含まれるフォームによって引き起こされる検証の失敗に耐えるビューパラメータが必要な場合@RequestScopedは、Beanが必要です。それ以外の場合は、コマンドで後続のリクエストのすべてのリクエストパラメータを手動で保持する必要があります。コンポーネント。@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オブジェクトがBeanプロパティとして設定されます。
@ManagedProperty:Beanの構築直後の値を設定します。
設定値を使用@PostConstructできるため、設定値に基づいて他のプロパティを簡単に初期化/プリロードできます。
ビュー内で宣言型の変換/検証を許可しません。
の管理プロパティは#{param}、リクエストスコープよりもスコープが広いBeanでは許可されていないため、Beanはである必要があります@RequestScoped。
後続のPOST要求に存在する管理プロパティに依存している場合は、コンポーネント#{param}と同様にそれを含める必要があります。<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でも自分で検証を管理する必要があります。nullFacesContext#addMessage()
とが必須の場合は、両方を使用できます。きめ細かい変換/検証を適用することはできなくなります。@PostConstructincludeViewParams
他の2つの違い:
@ManagedPropertyJSFによって管理されるBeanでのみ使用可能であり、CDIによって管理されるBeanでは使用できません(@Named);
<f:viewParam>GETリクエストのパラメータでのみ機能します。