[
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)