我看过类似的问题,但我不认为这是一个转发,因为我可以从WebFilter访问ManagedBean,但奇怪的是更新的属性....并不是真的更新。下面是详细信息:SessionScoped Managed Bean值没有从Servlet Filter中更改
我有一个过滤器,这是否(在Glassfish 3.1.2,WebFilter的注释使用钻嘴鱼科2.1.6):
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain)
throws IOException, ServletException {
// FacesContextHelper is a utility class to get some Faces stuff
FacesContextHelper facesContextHelper = new FacesContextHelper();
// this returns the correct instance of a SessionScoped ManagedBean
userInfoView = (UserInfoView) facesContextHelper.getManagedBean(request,
response, "userInfoView", UserInfoView.class);
// ... some computation here to get the 'vm' URL parameter
userInfoView.setViewMode(viewMode);
// ....
chain.doFilter(request, response);
}
现在在facelet里,我用这viewMode
:
<h:panelGroup layout="block" rendered="#{userInfoView.viewMode ne 1}">
<ui:include src="/WEB-INF/jsf/v2/products.xhtml"/>
</h:panelGroup>
为了完整性起见,这里是一个局部UserInfoView:
@ManagedBean(name = "userInfoView")
@SessionScoped
public class UserInfoView extends AbstractView
implements ServiceConstant, Serializable {
private Integer viewMode = 0;
public Integer getViewMode() {
return viewMode;
}
public void setViewMode(Integer viewMode) {
this.viewMode = viewMode;
}
}
现在发生什么是由于某种原因(它似乎链接到JSESSIONID)我会有预期的行为:
- 具有“vm = 1”在GET请求集(调用UserInfoView setViewMode)viewMode为1
- 所述的facelet得到适当的值
然后只需重新启动Glassfish和:
- 具有在GET请求中的 “VM = 1” STILL集(调用UserInfoView setViewMode)的VIEWMODE 1
- 的Facelet获取--default **值(即0)
我怀疑RESTORE_VIEW阶段莫名其妙地重置变量为默认值,虽然我没有什么来支持这一理论而不是追查请求的生命周期的其他...
有什么我应该知道何时从Servlet过滤器中更改SessionScoped托管bean的变量?我的方法有问题吗?
我要看看这个选项。这可能是一种比我所知的更好的方法(直接在Bean的getViewMode中获取请求参数 – JScoobyCed 2012-04-11 07:51:30