hi tom,

we have to check if it is an issue of the jsf impl. you are using.
the todo was placed there, because there were some changes in the jsf
implementations.

it would be nice if you can provide a link to a small demo app which
illustrates the issue.
(-> not everybody of the community who would like to debug the issue has to
create the demo app.)

regards,
gerhard

http://www.irian.at

Your JSF powerhouse -
JSF Consulting, Development and
Courses in English and German

Professional Support for Apache MyFaces



2010/6/29 <[email protected]>

> Hi,
>
> the following NPE occured using Myfaces ExtVal:
>
> java.lang.NullPointerException
>        at
> javax.faces.component.UIComponent.getValueExpression(UIComponent.java:338)
>        at
> com.sun.faces.el.CompositeComponentAttributesELResolver$ExpressionEvalMap.getExpression(CompositeComponentAttributesELResolver.java:314)
>        at
> org.apache.myfaces.extensions.validator.core.el.ExtValELResolver.getCompositeComponentExpression(ExtValELResolver.java:277)
>        at
> org.apache.myfaces.extensions.validator.core.el.DefaultELHelper.getPropertyDetailsOfValueBinding(DefaultELHelper.java:169)
>        at
> org.apache.myfaces.extensions.validator.core.metadata.extractor.DefaultComponentMetaDataExtractor.extract(DefaultComponentMetaDataExtractor.java:77)
>        at
> org.apache.myfaces.extensions.validator.core.interceptor.AbstractValidationInterceptor.getPropertyInformation(AbstractValidationInterceptor.java:176)
>        at
> org.apache.myfaces.extensions.validator.core.interceptor.AbstractValidationInterceptor.processAfterValidation(AbstractValidationInterceptor.java:166)
>        at
> org.apache.myfaces.extensions.validator.core.interceptor.AbstractValidationInterceptor.beforeGetConvertedValue(AbstractValidationInterceptor.java:153)
>        at
> org.apache.myfaces.extensions.validator.core.renderkit.ExtValRendererWrapper.getConvertedValue(ExtValRendererWrapper.java:369)
>        at
> javax.faces.component.UIInput.getConvertedValue(UIInput.java:1008)
>        at javax.faces.component.UIInput.validate(UIInput.java:934)
>        at javax.faces.component.UIInput.executeValidate(UIInput.java:1189)
>        at javax.faces.component.UIInput.processValidators(UIInput.java:691)
>        at
> javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1080)
>        at
> javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1080)
>        at javax.faces.component.UIForm.processValidators(UIForm.java:243)
>        at
> javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1080)
>        at
> javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1080)
>        at
> javax.faces.component.UIViewRoot.processValidators(UIViewRoot.java:1180)
>        at
> com.sun.faces.lifecycle.ProcessValidationsPhase.execute(ProcessValidationsPhase.java:76)
>        at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
>        at
> com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
>        at javax.faces.webapp.FacesServlet.service(FacesServlet.java:312)
>
>
> I used the following code:
>
> Page:
>
>          <ui:composition
> template="/resources/templates/test-template.xhtml">
>
>                <ui:define name="test-workspace">
>
>                        <ui:remove>
>                                a) works <parts-test:nestedCC
> myValue="#{personBean.person}"/>
>                                b) works <parts-test:nestedCC
> myValue="#{personBean.person.adresse}"/>
>                        </ui:remove>
>
>                        c) NPE!!! <parts-test:nestedCC
> myValue="#{personBean.person.adresse.plz}"/>
>
>                </ui:define>
>
>        </ui:composition>
>
> CustomComponent:
>
>        <composite:interface>
>                <composite:attribute name="myValue" required="true" />
>        </composite:interface>
>
>       <composite:implementation>
>
>                <ui:remove>
>                        a) works <h:inputText id="theValue"
> value="#{cc.attrs.myValue.adresse.plz}" />
>                        b) works <h:inputText id="theValue"
> value="#{cc.attrs.myValue.plz}" />
>                </ui:remove>
>
>                    c) NPE!!! <h:inputText id="theValue"
> value="#{cc.attrs.myValue}" />
>
>        </composite:implementation>
>
> The code behind the scenes is:
> - a managed bean "PersonBean"
> - ...which refers to an object "Person" which refers to an object "Adresse"
> which has a string property "plz"
> - for testing purposes I implemented some get/setPlz in PersonBean and
> Person too which provide the value stored in Adresse.plz
>
> In case c), using a deeply nested EL expression, the NPE occurs.
>
> In the ExtVal code I found in
> org.apache.myfaces.extensions.validator.core.el.DefaultELHelper.getPropertyDetailsOfValueBinding(UIComponent):
>
> @ToDo(value = Priority.HIGH, description = "check if it works with nested
> composite components")
>
> Is this TODO still an open one or is the EL expression revealing a new bug?
>
> --
> WM 2010: Top News, Spielpläne, Public Viewing-Termine, E-Cards und alles,
> was der Fan sonst noch braucht, gibt´s im Sport-Channel auf arcor.de.
> http://www.arcor.de/rd/footer.wm2010
>

Reply via email to