myfaces-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Jay Sartoris (JIRA)" <>
Subject [jira] [Created] (MYFACES-3976) f:viewAction phase attribute reverts to INOVKE_APPLICATION
Date Fri, 03 Apr 2015 18:28:58 GMT
Jay Sartoris created MYFACES-3976:

             Summary: f:viewAction phase attribute reverts to INOVKE_APPLICATION
                 Key: MYFACES-3976
             Project: MyFaces Core
          Issue Type: Bug
          Components: JSR-344
    Affects Versions: 2.2.7
            Reporter: Jay Sartoris
            Priority: Minor

In JSF 2.2, the viewAction component has a phase attribute which a user can specify what JSF
lifecycle phase the action is executed in.  
For example:
<f:viewAction action="#{testBean.checkPhase}" phase="PROCESS_VALIDATIONS"/>

In the backing bean, the checkPhase method simply gets the current phase we are in like this:
PhaseId phase = FacesContext.getCurrentInstance().getCurrentPhaseId();

The issue is that this is always called during the INVOKE_APPLICATION phase regardless of
what is specified in the phase attribute. 
I tested this scenario with Mojarra 2.2.10 and it works as I expect it to...meaning it gets
called in the phase that is specified in the phase attribute. 

In an initial investigation, I think the problem is in the javax.faces.component.UIViewAction
class in the queueEvent method.
Before going in to the if/else block below, the event.getPhaseId will have the value that
was set on the phase attribute in the JSF page.  However, this block of code will change it
to INVOKE_APPLICATION, which is the default phase the viewAction is called in: 

public void queueEvent(FacesEvent event)
        if (event != null && event instanceof ActionEvent)
            UIComponent component = event.getComponent();
            if (component instanceof ActionSource)
                if (((ActionSource)component).isImmediate())

I believe the fix should change the else block to leave the phaseId on the event object as
is if it one of the valid values:

Note: RESTORE_VIEW and RENDER_RESPONSE are not valid values for the phase attribute of viewAction.

Note2: INVOKE_APPLICATION is the default phase a viewAction is called, so that needs to be
taken in to consideration as well (e.g. if some invalid value specified in the phase attribute)

This message was sent by Atlassian JIRA

View raw message