11

includeViewParams=trueJSF暗黙ナビゲーションでクエリパラメータを使用しても、ブックマーク機能は実現できますか?はいの場合、どのように?

4

1 に答える 1

21

まず、正確に「ブックマーク可能性」とは何か、そして正確に何をするのかを理解する必要がありますincludeViewParams。このようにして、両方の組み合わせの効果をよりよく理解することができます。

ブックマーク機能は、ブラウザのアドレスバーに表示される正確な形式のHTTPリクエストURLに関係します。エンドユーザーがブックマークに保存したり、フォーラム、チャットボックス、ソーシャルメディア、新しいブラウザウィンドウ/タブなど、他の場所にリンクとしてコピーアンドペーストしたりするのとまったく同じURLです。リンクをたどるときまたは、URLがブラウザのアドレスバーにコピーペーストされると、デフォルトでHTTPGETリクエストが発生します。結果が毎回まったく同じである場合(承認/認証とページの時間に敏感な性質(検索結果、最新ニュースなど)を考慮せずに残す)、ブックマーク可能なURLについて話すことができます。専門用語は「べきHTTPリクエスト」です。

ただし、エンドユーザーがそのURLでPOSTフォームを事前に送信していて、リダイレクトが実行されていない場合、そのURLは必ずしもブックマーク可能であるとは限りません。送信されたフォームデータはURLに反映されません。URLを新しいブラウザウィンドウ/タブにコピーして貼り付けると、フォームの送信後とまったく同じ結果が得られるとは限りません。そのようなURLはブックマークできません。POSTはべき等ではありません。そのため、コマンドリンクによるページ間ナビゲーションは不適切です

ブックマーク機能は通常、URLパスやクエリパラメータの特定の構成によって実現されます。qGoogleを見ると、クエリ文字列パラメータのおかげで検索結果をブックマークできます。

http://google.com/search?q=bookmarkability

JSFの用語では、これらのリクエストパラメータは次の方法で設定(および変換および検証)できます<f:viewParam>

<f:metadata>
    <f:viewParam name="q" value="#{bean.query}" />
    <f:viewAction action="#{bean.search}" />
</f:metadata>

たとえばページネーションを実行する必要があり、URLをブックマーク可能にしておきたい場合は、別のリクエストパラメータを追加できます。

http://google.com/search?q=bookmarkability&start=10

<f:metadata>
    <f:viewParam name="q" value="#{bean.query}" />
    <f:viewParam name="start" value="#{bean.start}" />
    <f:viewAction action="#{bean.search}" />
</f:metadata>

includeViewParams="true"基本的に、生成されたGETリンクにこれらのビューパラメータがすべて含まれます。qこれにより、ページネーションリンクは、パラメータを繰り返す必要なしに次のようになります。

<h:link value="1" outcome="search" includeViewParams="true">
    <f:param name="start" value="#{null}" />
</h:link>
<h:link value="2" outcome="search" includeViewParams="true">
    <f:param name="start" value="10" />
</h:link>
<h:link value="3" outcome="search" includeViewParams="true">
    <f:param name="start" value="20" />
</h:link>
...

(もちろん、いくつ<ui:repeat>かによって生成されます)

でページに入るとq=bookmarkability、次のリンクが生成されます

/search.xhtml?q=bookmarkability
/search.xhtml?start=10&q=bookmarkability
/search.xhtml?start=20&q=bookmarkability

これらはブックマーク可能なURLであり、includeViewParams作成がより便利になります。

于 2012-11-06T12:12:38.943 に答える