[ 
https://issues.apache.org/jira/browse/MYFACES-4041?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Leonardo Uribe updated MYFACES-4041:
------------------------------------
    Status: Patch Available  (was: Open)

> 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
>             Fix For: 2.2.10
>
>
> 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