jsf - flash scope - 方法参数评估阶段

时间:2012-12-03 19:12:01

标签: jsf parameters

我考虑过使用flash scope来保存以前的站点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_URI是否在下一个请求中进行评估,导致flash值为空?

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

1 个答案:

答案 0 :(得分:0)

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

您最好的选择是将其作为<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>元素,它可以收藏,也可以搜索索引。