NullpointerException in MyFacesGenericPortlet after action-invocation
---------------------------------------------------------------------

         Key: MYFACES-1150
         URL: http://issues.apache.org/jira/browse/MYFACES-1150
     Project: MyFaces Core
        Type: Bug
 Environment: XP / JBoss Portal 2.21RC2 / JDK5
    Reporter: Martin Schmidt


The problem is, that the sessionTimeout(...) detector method does not work 
properly, because there is always as session in this jboss context - and I 
think under many more application servers...

This is the solution (as part of a subclass I made from MyFacesGenericPortlet:

protected void facesRender(RenderRequest request, RenderResponse response) 
throws PortletException, java.io.IOException {
        if (log.isTraceEnabled())
                log.trace("called facesRender");

        setContentType(request, response);
//////////////////////////////////////////////////// MODIFIED
        String viewId = request.getParameter(VIEW_ID);
        boolean nonFacesRequest = (viewId == null) || sessionTimedOut(request);
        request.getPortletSession(true).setAttribute(SESSION_LIVE_ATTR, 
Boolean.TRUE); /////// say we are alive
        if (nonFacesRequest) {
//////////////////////////////////////////////////// 
                setPortletRequestFlag(request);
                nonFacesRequest(request, response);
                return;
        }

        setPortletRequestFlag(request);

        try {
                ServletFacesContextImpl facesContext = 
(ServletFacesContextImpl) 
request.getPortletSession().getAttribute(CURRENT_FACES_CONTEXT);
                if (facesContext == null) {
                        facesContext = (ServletFacesContextImpl) 
facesContext(request, response);
                        
request.getPortletSession().setAttribute(CURRENT_FACES_CONTEXT, facesContext);
                }

                // TODO: not sure if this can happen. Also double check this 
against
                // spec section 2.1.3
                if (facesContext.getResponseComplete())
                        return;

                facesContext.setExternalContext(makeExternalContext(request, 
response));
                lifecycle.render(facesContext);
        } catch (Throwable e) {
                handleExceptionFromLifecycle(e);
        }
}


protected boolean sessionTimedOut(PortletRequest request) {
        if (super.sessionTimedOut(request))
                return true;

        Object flag = 
request.getPortletSession(false).getAttribute(SESSION_LIVE_ATTR);
        return flag == null;
}



-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
   http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
   http://www.atlassian.com/software/jira

Reply via email to