1. ホーム
  2. jsf

[解決済み] h:commandLinkの代わりにh:outputLinkを使うべきですか?

2022-07-05 02:46:52

質問

どのような場合に <h:outputLink> の代わりに <h:commandLink> ?

というのはわかりますが commandLink は HTTP のポストを生成します。 outputLink はHTTPのgetを生成すると思います。とはいえ、ほとんどの JSFチュートリアルの資料 を使用しています。 commandLink (を使用しています(ほとんど?

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

...そして、私は、もし commandLink (を使用しています(おそらく ?faces-redirect=true を使用)または outputLink が正しい選択です。

どのように解決するのですか?

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

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


この <h:commandLink> は HTML <a> 要素に onclick スクリプトで、(hidden) POST フォームを送信し、マネージドビーンのアクションメソッドを呼び出すことができます。また、このスクリプトは <h:form> .

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

?faces-redirect=true のパラメータは <h:commandLink> で、これは POST の後にリダイレクトを引き起こします (例として ポスト・リダイレクト・ゲット パターンに従って)、リンクが実際にクリックされたときにターゲットページのブックマーク可能性を向上させるだけであり(URLはもう"1 behind"ではありません)、これは href<a> 要素を完全な URL にする必要があります。それはまだ # .

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


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

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


ですから、SOユーザー名のリンクのように、純粋かつブックマーク可能なページ間ナビゲーションであれば <h:outputLink> または <h:link> . ボットは通常、POSTフォームやJSコードを暗号化しないので、これはSEOにとっても良いことです。また、ページがブックマークできるようになり、URLが「quot;one behind"」でなくなるため、UXも改善されるでしょう。

必要であれば、前処理をコンストラクタまたは @PostConstruct@RequestScoped または @ViewScoped @ManagedBean というように、当該目的ページに添付される。を利用することができます。 @ManagedProperty または <f:viewParam> で、GETパラメータをBeanのプロパティとして設定します。

こちらもご覧ください。