1

私は jsf2 アプリケーションで作業していますが、アドレス バーに表示されるページ名に問題があります。別のページに移動すると、アドレスバーに前のページの名前が表示されます。

ありがとう。

4

2 に答える 2

2

これは、ページ間のナビゲーションに 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>

以下も参照してください。

于 2011-09-05T13:14:22.923 に答える
2

これは、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";
}
于 2011-09-05T12:34:39.793 に答える