You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@myfaces.apache.org by my...@arcor.de on 2010/07/19 10:22:52 UTC

ExtVal: PropertyNotFoundException for nested composite components

Hi at all,

I found a bug which I think is a jsf problem rather than for ExtVal, but since the code refers to https://issues.apache.org/jira/browse/EXTVAL-102 I would like you to check it too:

Exception is javax.el.PropertyNotFoundException: /resources/parts/partbase.xhtml @23,53 value="#{cc.attrs.child.value}": Target Unreachable, 'child' returned null

which occurs in org.apache.myfaces.extensions.validator.core.el.DefaultELHelper

  private void inspectTarget(ValueExpression valueExpression, ELContext elContext, boolean inspectCompositeComponent)
    {
        try
        {
            valueExpression.setValue(elContext, null);
        }
        catch (Throwable t)
        {
            if(inspectCompositeComponent)
            {
                throw new IllegalStateException(
                        "error at binding: " + valueExpression.getExpressionString() +
                                " -- an el-resolver error occurred! maybe you used an invalid binding.", t);
            }
        }
    }

after runnign throug ExtVal-102 code:

public PropertyDetails getPropertyDetailsOfValueBinding(UIComponent uiComponent)
    {
       ...

        //see EXTVAL-102
        if (elResolver.getBaseObject() instanceof CompositeComponentExpressionHolder)
        {
            ValueExpression newValueExpression = ((CompositeComponentExpressionHolder) elResolver.getBaseObject())
                    .getExpression(elResolver.getProperty());

            if (newValueExpression != null)
            {
                elResolver = createWrappedELContext(facesContext);
                inspectTarget(newValueExpression,
                        ExtValELResolver.createContextWrapper(
                                facesContext.getELContext(), elResolver), false); --> Exception!
            }
        }


I provided a simple war project containing templates and simple classes (bean --> parent class --> child class with string value):
http://www.humyo.de/10453303/TestProject.war?a=W0dLMKgfIko

The problem seems to come from com.sun.faces.component.CompositeComponentStackManager.findCompositeComponentUsingLocation(FacesContext, Location), where the location of composite components fails for my example.

Thanks.

-- 
E-Cards: Schon fertig für die ganz Eiligen oder individuell zum Selbstgestalten - für jeden Anlass gibt´s die richtige E-Card auf arcor.de.
http://www.arcor.de/rd/footer.ecard

Re: ExtVal: PropertyNotFoundException for nested composite components

Posted by Gerhard Petracek <ge...@gmail.com>.
hi tom,

extval tries to initialize input components before they get rendered. so you
see the exception quite early.
i haven't analyzed the details of the example - however, if you deactivate
extval (via vm parameter), you will see the same issue at the next postback.

so you are right - it is >not< an issue of extval.

regards,
gerhard

http://www.irian.at

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

Professional Support for Apache MyFaces


2010/7/19 Gerhard Petracek <ge...@gmail.com>

> hi tom,
>
> i'll have a look at the example.
>
> regards,
> gerhard
>
> http://www.irian.at
>
> Your JSF powerhouse -
> JSF Consulting, Development and
> Courses in English and German
>
> Professional Support for Apache MyFaces
>
>
>
> 2010/7/19 <my...@arcor.de>
>
> Hi at all,
>>
>> I found a bug which I think is a jsf problem rather than for ExtVal, but
>> since the code refers to https://issues.apache.org/jira/browse/EXTVAL-102I would like you to check it too:
>>
>> Exception is javax.el.PropertyNotFoundException:
>> /resources/parts/partbase.xhtml @23,53 value="#{cc.attrs.child.value}":
>> Target Unreachable, 'child' returned null
>>
>> which occurs in
>> org.apache.myfaces.extensions.validator.core.el.DefaultELHelper
>>
>>  private void inspectTarget(ValueExpression valueExpression, ELContext
>> elContext, boolean inspectCompositeComponent)
>>    {
>>        try
>>        {
>>            valueExpression.setValue(elContext, null);
>>        }
>>        catch (Throwable t)
>>        {
>>            if(inspectCompositeComponent)
>>            {
>>                throw new IllegalStateException(
>>                        "error at binding: " +
>> valueExpression.getExpressionString() +
>>                                " -- an el-resolver error occurred! maybe
>> you used an invalid binding.", t);
>>            }
>>        }
>>    }
>>
>> after runnign throug ExtVal-102 code:
>>
>> public PropertyDetails getPropertyDetailsOfValueBinding(UIComponent
>> uiComponent)
>>    {
>>       ...
>>
>>        //see EXTVAL-102
>>        if (elResolver.getBaseObject() instanceof
>> CompositeComponentExpressionHolder)
>>        {
>>            ValueExpression newValueExpression =
>> ((CompositeComponentExpressionHolder) elResolver.getBaseObject())
>>                    .getExpression(elResolver.getProperty());
>>
>>            if (newValueExpression != null)
>>            {
>>                elResolver = createWrappedELContext(facesContext);
>>                inspectTarget(newValueExpression,
>>                        ExtValELResolver.createContextWrapper(
>>                                facesContext.getELContext(), elResolver),
>> false); --> Exception!
>>            }
>>        }
>>
>>
>> I provided a simple war project containing templates and simple classes
>> (bean --> parent class --> child class with string value):
>> http://www.humyo.de/10453303/TestProject.war?a=W0dLMKgfIko
>>
>> The problem seems to come from
>> com.sun.faces.component.CompositeComponentStackManager.findCompositeComponentUsingLocation(FacesContext,
>> Location), where the location of composite components fails for my example.
>>
>> Thanks.
>>
>> --
>> E-Cards: Schon fertig für die ganz Eiligen oder individuell zum
>> Selbstgestalten - für jeden Anlass gibt´s die richtige E-Card auf
>> arcor.de.
>> http://www.arcor.de/rd/footer.ecard
>>
>
>

Re: ExtVal: PropertyNotFoundException for nested composite components

Posted by Gerhard Petracek <ge...@gmail.com>.
hi tom,

i'll have a look at the example.

regards,
gerhard

http://www.irian.at

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

Professional Support for Apache MyFaces



2010/7/19 <my...@arcor.de>

> Hi at all,
>
> I found a bug which I think is a jsf problem rather than for ExtVal, but
> since the code refers to https://issues.apache.org/jira/browse/EXTVAL-102I would like you to check it too:
>
> Exception is javax.el.PropertyNotFoundException:
> /resources/parts/partbase.xhtml @23,53 value="#{cc.attrs.child.value}":
> Target Unreachable, 'child' returned null
>
> which occurs in
> org.apache.myfaces.extensions.validator.core.el.DefaultELHelper
>
>  private void inspectTarget(ValueExpression valueExpression, ELContext
> elContext, boolean inspectCompositeComponent)
>    {
>        try
>        {
>            valueExpression.setValue(elContext, null);
>        }
>        catch (Throwable t)
>        {
>            if(inspectCompositeComponent)
>            {
>                throw new IllegalStateException(
>                        "error at binding: " +
> valueExpression.getExpressionString() +
>                                " -- an el-resolver error occurred! maybe
> you used an invalid binding.", t);
>            }
>        }
>    }
>
> after runnign throug ExtVal-102 code:
>
> public PropertyDetails getPropertyDetailsOfValueBinding(UIComponent
> uiComponent)
>    {
>       ...
>
>        //see EXTVAL-102
>        if (elResolver.getBaseObject() instanceof
> CompositeComponentExpressionHolder)
>        {
>            ValueExpression newValueExpression =
> ((CompositeComponentExpressionHolder) elResolver.getBaseObject())
>                    .getExpression(elResolver.getProperty());
>
>            if (newValueExpression != null)
>            {
>                elResolver = createWrappedELContext(facesContext);
>                inspectTarget(newValueExpression,
>                        ExtValELResolver.createContextWrapper(
>                                facesContext.getELContext(), elResolver),
> false); --> Exception!
>            }
>        }
>
>
> I provided a simple war project containing templates and simple classes
> (bean --> parent class --> child class with string value):
> http://www.humyo.de/10453303/TestProject.war?a=W0dLMKgfIko
>
> The problem seems to come from
> com.sun.faces.component.CompositeComponentStackManager.findCompositeComponentUsingLocation(FacesContext,
> Location), where the location of composite components fails for my example.
>
> Thanks.
>
> --
> E-Cards: Schon fertig für die ganz Eiligen oder individuell zum
> Selbstgestalten - für jeden Anlass gibt´s die richtige E-Card auf arcor.de
> .
> http://www.arcor.de/rd/footer.ecard
>