[
https://issues.apache.org/jira/browse/MYFACES-3915?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14118742#comment-14118742
]
Leonardo Uribe commented on MYFACES-3915:
-----------------------------------------
More than a bug it is an improvement. The algorithm as is was not designed to
contemplate the case of hold a binding inside an attribute map. The problem is
the attribute map is saved with the composite component state, but by its own
relationship it is saved too as a part of the tree.
Theoretically it could be possible to fix it, if we handle the case inside
DeltaStateHelper, but I don't have clear yet how to do it. It looks
interesting, it is natural that the composite component hold bindings to its
children to facilitate access. I'll give it a try.
> NullpointerException during UIOuput state handling
> --------------------------------------------------
>
> Key: MYFACES-3915
> URL: https://issues.apache.org/jira/browse/MYFACES-3915
> Project: MyFaces Core
> Issue Type: Bug
> Affects Versions: 2.2.4
> Reporter: Sven Linstaedt
>
> Under the conditions:
> * having a h:inputText in a composite component with binding to it's
> composite component attribute map (like binding="#{cc.attrs.input}")
> * attaching state holding converter (implements StateHolder) to the input
> with non initial state
> * having no other state saved (specifically UIOuput#saveState returns null)
> a state array of size two is returned that looks like [null, converterState].
> Restoring this state causes UIOuput to hand over the first array entry to
> UIOuput, which directly fails with a NPE, if the initialState was not marked.
> {code}
> java.lang.NullPointerException: state
> at
> javax.faces.component.UIComponentBase.restoreState(UIComponentBase.java:2046)
> at javax.faces.component.UIOutput.restoreState(UIOutput.java:241)
> at javax.faces.component.UIInput.restoreState(UIInput.java:1060)
> at
> javax.faces.component.UIComponentBase.restoreAttachedState(UIComponentBase.java:1915)
> at
> javax.faces.component._DeltaStateHelper$InternalMap.restoreState(_DeltaStateHelper.java:925)
> at
> javax.faces.component.UIComponentBase.restoreAttachedState(UIComponentBase.java:1915)
> at
> javax.faces.component._DeltaStateHelper.copyMap(_DeltaStateHelper.java:289)
> at
> javax.faces.component._DeltaStateHelper._createDeltas(_DeltaStateHelper.java:216)
> at
> javax.faces.component._DeltaStateHelper.put(_DeltaStateHelper.java:425)
> at
> javax.faces.component._ComponentAttributesMap.put(_ComponentAttributesMap.java:603)
> at
> javax.faces.component._ComponentAttributesMap.put(_ComponentAttributesMap.java:55)
> at
> org.apache.myfaces.el.unified.resolver.CompositeComponentELResolver$CompositeComponentAttributesMapWrapper.put(CompositeComponentELResolver.java:418)
> at
> org.apache.myfaces.el.unified.resolver.CompositeComponentELResolver$CompositeComponentAttributesMapWrapper.put(CompositeComponentELResolver.java:271)
> at javax.el.MapELResolver.setValue(MapELResolver.java:94)
> at javax.el.CompositeELResolver.setValue(CompositeELResolver.java:83)
> at org.apache.el.parser.AstValue.setValue(AstValue.java:221)
> at
> org.apache.el.ValueExpressionImpl.setValue(ValueExpressionImpl.java:252)
> at
> org.jboss.weld.el.WeldValueExpression.setValue(WeldValueExpression.java:64)
> at
> org.apache.myfaces.view.facelets.el.ContextAwareTagValueExpression.setValue(ContextAwareTagValueExpression.java:153)
> at
> org.apache.myfaces.view.facelets.el.LocationValueExpression.setValue(LocationValueExpression.java:157)
> at javax.faces.component.UIComponent.processEvent(UIComponent.java:849)
> at
> org.apache.myfaces.lifecycle.DefaultRestoreViewSupport$RestoreStateCallback.visit(DefaultRestoreViewSupport.java:281)
> at
> org.apache.myfaces.component.visit.FullVisitContext.invokeVisitCallback(FullVisitContext.java:141)
> at javax.faces.component.UIComponent.visitTree(UIComponent.java:1016)
> at
> javax.faces.component.UIComponentBase.visitTree(UIComponentBase.java:1191)
> at javax.faces.component.UIComponent.visitTree(UIComponent.java:1044)
> at
> javax.faces.component.UIComponentBase.visitTree(UIComponentBase.java:1191)
> at javax.faces.component.UIComponent.visitTree(UIComponent.java:1044)
> at
> javax.faces.component.UIComponentBase.visitTree(UIComponentBase.java:1191)
> at javax.faces.component.UIComponent.visitTree(UIComponent.java:1044)
> at
> javax.faces.component.UIComponentBase.visitTree(UIComponentBase.java:1191)
> at
> javax.faces.component.UINamingContainer.visitTree(UINamingContainer.java:177)
> at javax.faces.component.UIComponent.visitTree(UIComponent.java:1044)
> at
> javax.faces.component.UIComponentBase.visitTree(UIComponentBase.java:1191)
> at javax.faces.component.UIComponent.visitTree(UIComponent.java:1032)
> at
> javax.faces.component.UIComponentBase.visitTree(UIComponentBase.java:1191)
> at
> kn.gvs.framework.jsf.component.UIComposedInputComponent.visitTree(UIComposedInputComponent.java:337)
> at javax.faces.component.UIComponent.visitTree(UIComponent.java:1044)
> at
> javax.faces.component.UIComponentBase.visitTree(UIComponentBase.java:1191)
> at javax.faces.component.UIComponent.visitTree(UIComponent.java:1044)
> at
> javax.faces.component.UIComponentBase.visitTree(UIComponentBase.java:1191)
> at javax.faces.component.UIForm.visitTree(UIForm.java:345)
> at javax.faces.component.UIComponent.visitTree(UIComponent.java:1044)
> at
> javax.faces.component.UIComponentBase.visitTree(UIComponentBase.java:1191)
> at javax.faces.component.UIComponent.visitTree(UIComponent.java:1044)
> at
> javax.faces.component.UIComponentBase.visitTree(UIComponentBase.java:1191)
> at
> org.apache.myfaces.lifecycle.DefaultRestoreViewSupport.processComponentBinding(DefaultRestoreViewSupport.java:144)
> at
> org.apache.myfaces.lifecycle.RestoreViewExecutor.execute(RestoreViewExecutor.java:202)
> at
> org.apache.myfaces.lifecycle.LifecycleImpl.executePhase(LifecycleImpl.java:196)
> at
> org.apache.myfaces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:143)
> at
> org.apache.deltaspike.jsf.impl.listener.request.DeltaSpikeLifecycleWrapper.execute(DeltaSpikeLifecycleWrapper.java:89)
> at
> javax.faces.lifecycle.LifecycleWrapper.execute(LifecycleWrapper.java:46)
> at javax.faces.webapp.FacesServlet.service(FacesServlet.java:198)
> at
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
> at
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
> at
> org.jboss.weld.servlet.ConversationFilter.doFilter(ConversationFilter.java:70)
> [...]
> {code}
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)