Leonardo Uribe created MYFACES-4041:
---------------------------------------

             Summary: EL evaluation fails when state is saved because 
FaceletState object is not present
                 Key: MYFACES-4041
                 URL: https://issues.apache.org/jira/browse/MYFACES-4041
             Project: MyFaces Core
          Issue Type: Bug
          Components: JSR-344
    Affects Versions: 2.2.9
            Reporter: Martin Marinschek
            Assignee: Leonardo Uribe
            Priority: Blocker


DefaultFaceletsStateManagementStrategy.saveView(...) contains some lines of 
code that do this:

{code:java}
                states = new HashMap<String, Object>();

                faceletViewState = 
view.getAttributes().get(ComponentSupport.FACELET_STATE_INSTANCE);
                if (faceletViewState != null)
                {
                    ((Map<String, 
Object>)states).put(ComponentSupport.FACELET_STATE_INSTANCE,
                            UIComponentBase.saveAttachedState(context, 
faceletViewState));
                    //Do not save on UIViewRoot
                    
view.getAttributes().remove(ComponentSupport.FACELET_STATE_INSTANCE);
                }
{code}

The problem is FaceletState is removed to be serialized, but FaceletState is 
also used for EL expressions (see FaceletStateValueExpression), so every EL 
expression that is evaluated when the state is being saved that depends on this 
map throws NullPointerException.

The problem has been experienced by other users before (see MYFACES-4023 for 
details), but in the case reported here (treeTable component and dynamic 
columns) there is no other possible workaround than to preserve FaceletState 
object so the EL can be properly evaluated.

The solution is use the transient state helper map to hold FaceletState and 
change FaceletStateValueExpression to scan for this condition.



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

Reply via email to