h:commandLink の代わりに h:outputLink を使用する必要があるのはどのような場合ですか? 質問する

h:commandLink の代わりに h:outputLink を使用する必要があるのはどのような場合ですか? 質問する

<h:outputLink>いつ の代わりにを使用すればよいですか<h:commandLink>?

はHTTP POSTを生成することは理解していますcommandLink。HTTP GETも生成されると思いますoutputLink。とはいえ、JSFチュートリアル資料commandLink私は(ほぼ?)排他的に使用法を読みました。

コンテキスト: Stack Overflow のように、ユーザー ページへのヘッダー リンクを表示する小さなデモ プロジェクトを実装しています...

jQueryがもっと必要

commandLink...そして、 (おそらく?faces-redirect=trueブックマーク機能のために)またはがoutputLink正しい選択であるかどうかはわかりません。

ベストアンサー1

<h:outputLink>ブックマーク可能な GET リクエストを起動する属性<a>に適切な URL を持つ完全な HTML 要素をレンダリングします。マネージド Bean アクション メソッドを直接呼び出すことはできません。href

<h:outputLink value="destination.xhtml">link text</h:outputLink>

<h:commandLink>(隠し) POST フォームを送信し、マネージド Bean アクション メソッドを呼び出すことができるスクリプトを含むHTML<a>要素をレンダリングしますonclick。 また、 内に配置する必要があります<h:form>

<h:form>
    <h:commandLink value="link text" action="destination" />
</h:form>

?faces-redirect=trueのパラメータは、<h:commandLink>POST後にリダイレクトをトリガーします(リダイレクト後の取得パターン) は、リンクが実際にクリックされたときにターゲット ページのブックマーク可能性を向上させるだけです (URL は「1 つ後ろ」ではなくなります)。ただし、要素hrefの が<a>完全な価値のある URL に変更されるわけではありません。 は依然として のままです#

<h:form>
    <h:commandLink value="link text" action="destination?faces-redirect=true" />
</h:form>

JSF 2.0以降では、<h:link>URL の代わりにビュー ID (ナビゲーション ケースの結果) を取得できます。<a>適切な URL を含む HTML 要素も生成されますhref

<h:link value="link text" outcome="destination" />

したがって、SO ユーザー名リンクのような純粋でブックマーク可能なページ間ナビゲーションの場合は、<h:outputLink>または を使用します<h:link>。ボットは通常、POST フォームや JS コードを暗号化しないため、SEO にも適しています。また、ページがブックマーク可能になり、URL が「1 つ後ろ」ではなくなるため、UX も向上します。

必要に応じて、問題の宛先ページに添付されているまたはのコンストラクターまたは で前処理ジョブを実行できます@PostConstruct。またはを使用して、GET パラメータを Bean プロパティとして設定できます。@RequestScoped@ViewScoped @ManagedBean@ManagedProperty<f:viewParam>

参照:

おすすめ記事