myfaces-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Vijay Pandey (JIRA)" <...@myfaces.apache.org>
Subject [jira] [Created] (MYFACES-4039) Even after renderResponse set in the beforePhase of the InvokeApplication PhaseListener - events are still broadcasted
Date Sat, 19 Mar 2016 04:33:33 GMT
Vijay Pandey created MYFACES-4039:
-------------------------------------

             Summary: Even after renderResponse set in the beforePhase of the InvokeApplication
PhaseListener - events are still broadcasted
                 Key: MYFACES-4039
                 URL: https://issues.apache.org/jira/browse/MYFACES-4039
             Project: MyFaces Core
          Issue Type: Bug
          Components: JSR-344
    Affects Versions: 2.2.9
         Environment: JDK 7, Websphere Liberty Profile JEE7 - 8.5.5.8
            Reporter: Vijay Pandey


We have a phaseListener that is setup against InvokeApplication phase - so when there is a
exception in beforePhase, we set the renderResponse on facesContext, thinking that it will
skip further processing and will not broadcast the events on InvokeApplication, but it does.

Class: LifecycleImpl - line # 191 onwards --
{code:title=LifecycleImpl.java|borderStyle=solid}
if (shouldRenderResponse(context, currentPhaseId, true))
            {
                skipFurtherProcessing = true;
            }

            if (executor.execute(context))
            {
                return true;
            }
{code}

Now the above code  clearly doesn't skip the executor.execute(context) even when renderResponse
was executed. 

But Mojarra 2.2.11 - behaves differently - it will skip if renderResponse is called in beforePhase.

com.sun.faces.lifecycle.Phase - line # 99 onwards:
{code:title=Phase.java|borderStyle=solid}
handleBeforePhase(context, listeners, event);
            if (!shouldSkip(context)) {
                execute(context);
            }
{code}

"shouldSkip" method impl in Phase.java
{code:title=Phase.java|borderStyle=solid}
  private boolean shouldSkip(FacesContext context) {
        if (context.getResponseComplete()) {
            return (true);
        } else if (context.getRenderResponse() &&
                   !PhaseId.RENDER_RESPONSE.equals(this.getId())) {
            return (true);
        } else {
            return (false);
        }

    }
{code}

Now is Mojarra wrong or Myfaces implementation wrong? In cases like this what should be the
mechanism to skip the events if render response is set on the before phase.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Mime
View raw message