99

このようにビューパラメータを定義することの違いは何ですか?

<f:metadata>
  <f:viewParam name="id" value="#{someBean.id}"/>
</f:metadata>

そして、このようにManagedBeanでプロパティを定義します。

@ManagedProperty(value = "#{param.id}")
private Integer id;
4

2 に答える 2

146

<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


参照:

于 2011-02-03T17:06:28.600 に答える
6

他の2つの違い:

  • @ManagedPropertyJSFによって管理されるBeanでのみ使用可能であり、CDIによって管理されるBeanでは使用できません(@Named);
    • <f:viewParam>GETリクエストのパラメータでのみ機能します。
于 2012-12-06T15:44:08.233 に答える