0

我考虑过使用 flash 范围来保存以前的站点 uri 以允许在目标站点上进行反向重定向。

在主站点上,ajax 调用一个 bean 方法将当前 URI 保存在 flash 中并导航到作为参数提供的目标子站点。

在子站点上,使用来自闪存的先前存储的 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_URIin the action 调用导致 flash 值为空?

或者我如何将它保存为网站上的 var 以使其工作?<c:set>似乎不起作用。

4

1 回答 1

0

action属性<h:commandLink>是在回发请求的调用操作阶段而不是在初始请求的呈现响应阶段评估的,正如您所期望的那样。因此,在调用操作期间,flash 作用域属性将不再可用。

你最好的选择是通过它<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 回答