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>