[
https://issues.apache.org/jira/browse/MYFACES-3942?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14223488#comment-14223488
]
Leonardo Uribe commented on MYFACES-3942:
-----------------------------------------
This is caused by a chicken-egg problem at the time the metadata is created.
f:viewParam is created before FacesContext.setViewRoot(...) is called. But the
problem is we cannot call it when the metadata is created because this is
something defined by the spec. By that reason ComponentSupport.getViewRoot(...)
fails.
The solution is add a fail-safe approach to get the view root when facelets
algorithm is executed.
> <f:viewParam binding> causes NPE because UIViewRoot is null
> -----------------------------------------------------------
>
> Key: MYFACES-3942
> URL: https://issues.apache.org/jira/browse/MYFACES-3942
> Project: MyFaces Core
> Issue Type: Bug
> Affects Versions: 2.2.6
> Environment: Tomcat 8.0.14 and TomEE 2.0.0 snapshot.
> Reporter: Bauke Scholtz
>
> Using {{binding}} attribute on {{<f:viewParam>}} as follows:
> {code}
> <f:viewParam name="foo" binding="#{foo}" />
> {code}
> causes regardless of the binding location (Facelet itself as demonstrated
> above, request scoped bean, session scoped bean, etc) the following
> exception:
> {code}
> java.lang.NullPointerException
> at
> org.apache.myfaces.view.facelets.tag.jsf.ComponentTagHandlerDelegate.createComponent(ComponentTagHandlerDelegate.java:534)
> at
> org.apache.myfaces.view.facelets.tag.jsf.ComponentTagHandlerDelegate.apply(ComponentTagHandlerDelegate.java:284)
> at
> javax.faces.view.facelets.DelegatingMetaTagHandler.apply(DelegatingMetaTagHandler.java:50)
> at
> org.apache.myfaces.view.facelets.tag.jsf.core.ViewMetadataHandler.apply(ViewMetadataHandler.java:85)
> at
> org.apache.myfaces.view.facelets.tag.jsf.core.ViewHandler.apply(ViewHandler.java:195)
> at
> org.apache.myfaces.view.facelets.compiler.NamespaceHandler.apply(NamespaceHandler.java:59)
> at
> org.apache.myfaces.view.facelets.compiler.EncodingHandler.apply(EncodingHandler.java:48)
> at
> org.apache.myfaces.view.facelets.impl.DefaultFacelet.apply(DefaultFacelet.java:188)
> at
> org.apache.myfaces.view.facelets.FaceletViewDeclarationLanguage$FaceletViewMetadata.createMetadataView(FaceletViewDeclarationLanguage.java:2752)
> at
> org.apache.myfaces.lifecycle.RestoreViewExecutor.execute(RestoreViewExecutor.java:255)
> at
> org.apache.myfaces.lifecycle.LifecycleImpl.executePhase(LifecycleImpl.java:196)
> at
> org.apache.myfaces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:143)
> at javax.faces.webapp.FacesServlet.service(FacesServlet.java:198)
> ...
> {code}
> Turns out that {{UIViewRoot}} is {{null}} while the code didn't expect that.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)