Seam的redirect.captureCurrentView不能记住URL的参数
例如 components.xml 中的
<event type="org.jboss.seam.security.notLoggedIn">
<action execute="#{redirect.captureCurrentView}" />
</event>
不能将URL中的参数记住,并在跳转后恢复到URL上
使用被注解成@deprecated的Redirect.captureCurrentRequest()也不行。
只好自己写了,代码如下
@Name("org.jboss.seam.faces.redirect")
@BypassInterceptors
@Scope(ScopeType.CONVERSATION)
@Install(precedence=APPLICATION, classDependencies="javax.faces.context.FacesContext")
@PerNestedConversation
public class MyRedirect extends Redirect {
public void captureCurrentViewAndRequest() {
super.captureCurrentView();
Map<String, Object> pmap = FacesUtil.getServletRequest().getParameterMap();
for (String key : pmap.keySet()) {
if (!StringUtils.equals(key, "cid")) {
this.setParameter(key, FacesUtil.getRequestParameter(key));
}
}
}
}
在 components.xml 中的配置,改成
<event type="org.jboss.seam.security.notLoggedIn">
<action execute="#{redirect.captureCurrentViewAndRequest}" />
</event>
Seam框架中默认的redirect.captureCurrentView方法无法正确保存并恢复URL参数。本文介绍了一种通过自定义MyRedirect类来解决此问题的方法。
4548

被折叠的 条评论
为什么被折叠?



