Jsf 2 RichFaces中的会话空指针

Jsf 2 RichFaces中的会话空指针,jsf-2,spring-security,richfaces,Jsf 2,Spring Security,Richfaces,全部, 我在尝试访问会话映射时遇到以下问题: FacesContext.getCurrentInstance().getExternalContext() .getSessionMap().put("userSession", session); 我在登录时看到这个错误,然后等待几分钟,然后单击访问bean的任何按钮。这远远早于超时时间(我已设置为60分钟)。有人能帮忙吗?对我来说,这是一个重要的节目停止 java.lang.NullPointerException

全部,

我在尝试访问会话映射时遇到以下问题:

FacesContext.getCurrentInstance().getExternalContext() 
        .getSessionMap().put("userSession", session); 
我在登录时看到这个错误,然后等待几分钟,然后单击访问bean的任何按钮。这远远早于超时时间(我已设置为60分钟)。有人能帮忙吗?对我来说,这是一个重要的节目停止

java.lang.NullPointerException
      at com.sun.faces.context.SessionMap.put(ExternalContextImpl.java:970)
      at com.mounza.common.Util.logUser(Util.java:129)
      at com.mounza.common.Util.userStart(Util.java:159)
      at com.mounza.homepage.UserHomepageAction.<init>(UserHomepageAction.java:39)
      at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
      at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
      at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
      at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
      at java.lang.Class.newInstance0(Class.java:355)
      at java.lang.Class.newInstance(Class.java:308)
      at com.sun.faces.mgbean.BeanBuilder.newBeanInstance(BeanBuilder.java:186)
      at com.sun.faces.mgbean.BeanBuilder.build(BeanBuilder.java:106)
      at com.sun.faces.mgbean.BeanManager.createAndPush(BeanManager.java:368)
      at com.sun.faces.mgbean.BeanManager.create(BeanManager.java:230)
      at com.sun.faces.el.ManagedBeanELResolver.getValue(ManagedBeanELResolver.java:86)
      at javax.el.CompositeELResolver.getValue(CompositeELResolver.java:54)
      at com.sun.faces.el.FacesCompositeELResolver.getValue(FacesCompositeELResolver.java:72)
      at org.apache.el.parser.AstIdentifier.getValue(AstIdentifier.java:69)
      at org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:186)
      at com.sun.faces.application.ValueBindingValueExpressionAdapter.getValue(ValueBindingValueExpressionAdapter.java:113)
      at org.ajax4jsf.taglib.html.facelets.KeepAliveHandler.apply(KeepAliveHandler.java:76)
      at com.sun.facelets.tag.CompositeFaceletHandler.apply(CompositeFaceletHandler.java:47)
      at com.sun.facelets.tag.jsf.ComponentHandler.applyNextHandler(ComponentHandler.java:314)
      at com.sun.facelets.tag.jsf.ComponentHandler.apply(ComponentHandler.java:169)
      at com.sun.facelets.tag.jsf.core.ViewHandler.apply(ViewHandler.java:109)
      at com.sun.facelets.tag.ui.DefineHandler.applyDefinition(DefineHandler.java:64)
      at com.sun.facelets.tag.ui.CompositionHandler.apply(CompositionHandler.java:131)
      at com.sun.facelets.impl.DefaultFaceletContext$TemplateManager.apply(DefaultFaceletContext.java:337)
      at com.sun.facelets.impl.DefaultFaceletContext.includeDefinition(DefaultFaceletContext.java:307)
      at com.sun.facelets.tag.ui.InsertHandler.apply(InsertHandler.java:68)
      at com.sun.facelets.tag.CompositeFaceletHandler.apply(CompositeFaceletHandler.java:47)
      at com.sun.facelets.tag.jsf.core.ViewHandler.apply(ViewHandler.java:109)
      at com.sun.facelets.tag.CompositeFaceletHandler.apply(CompositeFaceletHandler.java:47)
      at com.sun.facelets.tag.ui.CompositionHandler.apply(CompositionHandler.java:119)
      at com.sun.facelets.compiler.NamespaceHandler.apply(NamespaceHandler.java:49)
      at com.sun.facelets.compiler.EncodingHandler.apply(EncodingHandler.java:25)
      at com.sun.facelets.impl.DefaultFacelet.include(DefaultFacelet.java:248)
      at com.sun.facelets.impl.DefaultFacelet.include(DefaultFacelet.java:294)
      at com.sun.facelets.impl.DefaultFacelet.include(DefaultFacelet.java:273)
      at com.sun.facelets.impl.DefaultFaceletContext.includeFacelet(DefaultFaceletContext.java:140)
      at com.sun.facelets.tag.ui.CompositionHandler.apply(CompositionHandler.java:113)
      at com.sun.facelets.compiler.NamespaceHandler.apply(NamespaceHandler.java:49)
      at com.sun.facelets.compiler.EncodingHandler.apply(EncodingHandler.java:25)
      at com.sun.facelets.impl.DefaultFacelet.apply(DefaultFacelet.java:95)
      at com.sun.facelets.FaceletViewHandler.buildView(FaceletViewHandler.java:524)
      at com.sun.facelets.FaceletViewHandler.renderView(FaceletViewHandler.java:567)
      at org.ajax4jsf.application.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java:100)
      at org.ajax4jsf.application.AjaxViewHandler.renderView(AjaxViewHandler.java:176)
      at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:110)
      at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:100)
      at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:139)
      at javax.faces.webapp.FacesServlet.service(FacesServlet.java:266)
      at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
      at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
      at org.apache.myfaces.webapp.filter.ExtensionsFilter.doFilter(ExtensionsFilter.java:349)
      at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
      at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
      at org.ajax4jsf.webapp.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:206)
      at org.ajax4jsf.webapp.BaseFilter.handleRequest(BaseFilter.java:290)
      at org.ajax4jsf.webapp.BaseFilter.processUploadsAndHandleRequest(BaseFilter.java:388)
      at org.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.java:515)
      at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
      at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
      at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:369)
      at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:109)
      at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:83)
      at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:381)
      at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:97)
      at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:381)
      at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:100)
      at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:381)
      at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:78)
      at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:381)
      at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:54)
      at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:381)
      at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:35)
      at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:381)
      at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:187)
      at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:381)
      at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:105)
      at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:381)
      at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:79)
      at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:381)
      at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:168)
      at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:237)
      at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:167)
      at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
      at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
      at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
      at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
      at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
      at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
      at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
      at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
      at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:859)
      at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:602)
      at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
      at java.lang.Thread.run(Thread.java:680)

以下是根本原因的相关部分:

Caused by: java.lang.NullPointerException
    at org.apache.catalina.connector.Request.parseParameters(Request.java:2599)
    at org.apache.catalina.connector.Request.getParameter(Request.java:1106)
    at org.apache.catalina.connector.RequestFacade.getParameter(RequestFacade.java:355)
    at javax.servlet.ServletRequestWrapper.getParameter(ServletRequestWrapper.java:158)
    at javax.servlet.ServletRequestWrapper.getParameter(ServletRequestWrapper.java:158)
    at com.sun.faces.context.RequestParameterMap.get(ExternalContextImpl.java:1152)
    at com.sun.faces.context.RequestParameterMap.get(ExternalContextImpl.java:1140)
    at java.util.Collections$UnmodifiableMap.get(Collections.java:1282)
    at com.mounza.homepage.UserHomepageAction.update(UserHomepageAction.java:47)
    ...
此异常表示HTTP请求已过期/已回收。我看不到您的代码,但此异常反过来表示您正在获取
FacesContext
、或
ExternalContext
、或
ExternalContext\getRequestParameterMap()返回的映射的实例
作为托管bean的类变量,其作用域比请求作用域更广,如下所示:

@ManagedBean
@ViewScoped // Or @SessionScoped or @ApplicationScoped
public class UserHomepageAction {

    private Map<String, String> params;

    public UserHomepageAction() {
        params = FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap();
    }

    public void update() {
        String value = params.get(name); // Fail!!
        // ...
    }

}
@ManagedBean
@查看范围//或@SessionScoped或@ApplicationScoped
公共类UserHomepageAction{
私有映射参数;
公共用户HomePageAction(){
params=FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap();
}
公共无效更新(){
String value=params.get(name);//失败!!
// ...
}
}
你不应该那样做。bean的生存期跨越多个HTTP请求。bean的action方法是在与构造bean不同的HTTP请求期间调用的。您应该在方法局部范围中获取线程/请求局部变量:

    public void update() {
        Map<String, String> params = FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap();
        String value = params.get(name); // OK!!
        // ...
    }
public void update(){
Map params=FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap();
String value=params.get(name);//确定!!
// ...
}


与具体问题无关:像那样摆弄请求参数映射是一种气味。你看过《代码》了吗?另请参见。

到底是哪种Mojarra版本?我搜索了所有2.0.x源代码,但找不到与stacktrace中的行号匹配的版本。至少,在其他版本中,它提示会话属性名称只是
null
。因此,这将把问题带回调用者,即您的
logUser()
方法。它正在将
null
设置为会话属性名。@BalusC我正在使用2.0.3。。。但是我对上面的帖子做了一些修改。你是100%正确的,这是我代码中的错误。谢谢你的帮助!!
    public void update() {
        Map<String, String> params = FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap();
        String value = params.get(name); // OK!!
        // ...
    }