<h:outputLink>
いつ の代わりにを使用すればよいですか<h:commandLink>
?
はHTTP POSTを生成することは理解していますcommandLink
。HTTP GETも生成されると思いますoutputLink
。とはいえ、JSFチュートリアル資料commandLink
私は(ほぼ?)排他的に使用法を読みました。
コンテキスト: Stack Overflow のように、ユーザー ページへのヘッダー リンクを表示する小さなデモ プロジェクトを実装しています...
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>