我考虑过使用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>
似乎不起作用。
答案 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>
元素,它可以收藏,也可以搜索索引。