0

以前のサイトの URI を保存して、ターゲット サイトでのバック リダイレクトを許可するために、フラッシュ スコープを使用することを考えました。

メイン サイトで、ajax は Bean メソッドを呼び出して現在の URI をフラッシュに保存し、パラメーターとして指定されたターゲット サブ サイトに移動します。

サブサイトでは、以前にフラッシュから保存された URI を使用して、Bean から単純なナビゲート メソッドが呼び出されます。

問題は次のとおりです 。フラッシュ内のデータは空ですが、サイトで印刷すると正しいです。

サブサイト

#{flash.PREVIOUS_URI}
<h:form>
    <h:commandLink value="Redirect from flash" 
        action="#{bean.navigate(flash.PREVIOUS_URI)}"/>
</h:form>

public String navigate(final String outcome)
{
    return outcome;
}

次のリクエストでアクション呼び出しがflash.PREVIOUS_URI評価され、フラッシュ値が空になりますか?

または、サイトに var として保存して機能させるにはどうすればよいですか? <c:set>動作しないようです。

4

1 に答える 1

0

action属性は<h:commandLink>、ポストバック リクエストの呼び出しアクション フェーズで評価されますが、最初のリクエストのレンダリング レスポンス フェーズでは評価されません。したがって、アクションの呼び出し中は、フラッシュ スコープの属性を使用できなくなります。

あなたの最善の策は、<f:param>代わりにそれを渡すことです:

<h:commandLink value="Redirect from flash" action="#{bean.navigate}">
    <f:param name="previousURI" value="#{flash.PREVIOUS_URI}" />
</h:commandLink>

@ManagedProperty("#{param.previousURI}")<f:viewParam name="previousURI">、またはで入手できますExternalContext#getRequestParameterMap()


または、基本的にこれだけしかない場合 (そして基本的にビジネス アクションを実行する必要がない場合) は、<h:link>代わりに使用することもできます。

<h:link value="Redirect from flash" outcome="#{flash.previousURI}" />

このように<h:form>は不要であり、<a>ブックマーク可能で検索ボットのインデックス付けが可能な完全に価値のある要素になります。

于 2012-12-03T20:40:15.633 に答える