このようにビューパラメータを定義することの違いは何ですか?
<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
でも自分で検証を管理する必要があります。null
FacesContext#addMessage()
とが必須の場合は、両方を使用できます。きめ細かい変換/検証を適用することはできなくなります。@PostConstruct
includeViewParams
他の2つの違い:
@ManagedProperty
JSFによって管理されるBeanでのみ使用可能であり、CDIによって管理されるBeanでは使用できません(@Named
);
<f:viewParam>
GETリクエストのパラメータでのみ機能します。