私は jsf2 アプリケーションで作業していますが、アドレス バーに表示されるページ名に問題があります。別のページに移動すると、アドレスバーに前のページの名前が表示されます。
ありがとう。
私は jsf2 アプリケーションで作業していますが、アドレス バーに表示されるページ名に問題があります。別のページに移動すると、アドレスバーに前のページの名前が表示されます。
ありがとう。
これは、ページ間のナビゲーションに GET の代わりに POST を使用しており、JSF はデフォルトで、使用しているビューとまったく同じビューに送信するためです<h:form>
。ページ間のナビゲーションに POST を使用することは、いずれにせよ非常に貧弱なアプローチです。ユーザーフレンドリーではない (ブックマーク可能で混乱しない) だけでなく、SEO フレンドリーでもありません (検索ボットは<form>
アクションに従いません)。
この問題を解決するには、<h:commandLink>
ページ間ナビゲーションの使用を停止する必要があります。<h:link>
代わりに使用してください。
<h:link value="Go to next page" outcome="nextpage" />
これは単にレンダリングします
<a href="/contextpath/nextpage.xhtml">Go to next page</a>
これは完全にブックマーク可能で、ユーザーフレンドリーで、SEO フレンドリーです。
実際の POST フォーム送信の結果として別のページに移動している場合は、同じビューで条件付きで結果/メッセージを返すnull
か、単にレンダリングすることでそれを置き換えます。void
または、結果をブックマーク可能にする必要がある場合 (検索結果など)、ターゲット ビューで使用する<form>
代わりに、通常のリンクまたはプレーンを使用する必要があります。<h:form>
<f:viewParam>
これは、JSF では、新しいページに移動するときに、サーバーが新しいページへの転送を実行しているためです。ブラウザは転送を認識せず、古い URL を表示しています。サーバーが転送ではなくリダイレクトを実行するようにするには、次のいずれかを行う必要があります。
ナビゲーション ルールを使用している場合は、<redirect/>
各ルールに a を追加します。
<navigation-rule>
<from-view-id>/pages/from.xhtml</from-view-id>
<navigation-case>
<from-outcome>to</from-outcome>
<to-view-id>/pages/to.xhtml</to-view-id>
<redirect/>
</navigation-case>
</navigation-rule>
Bean メソッドから結果を返す場合は、結果に a?faces-redirect=true
を追加します。
public String navigate() {
return "/pages/to?faces-redirect=true";
}