[ 
https://issues.apache.org/jira/browse/MYFACES-2552?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13071894#comment-13071894
 ] 

Matt Benson edited comment on MYFACES-2552 at 7/27/11 6:12 PM:
---------------------------------------------------------------

For future reference, this issue can be worked around in any JSF 2+ environment 
by simply adding a custom ELResolver with this method:

    @Override
    public Class<?> getType(ELContext context, Object base, Object property) {
        if (base instanceof CompositeComponentExpressionHolder && property 
instanceof String) {
            ValueExpression expr = ((CompositeComponentExpressionHolder) 
base).getExpression((String) property);
            if (expr != null) {
                return expr.getType(context);
            }
        }
        return null;
    }

Remaining methods should return null/false i.e. do nothing.

      was (Author: mbenson):
    For future reference, this issue can be worked around in any JSF 2+ 
environment by simply adding a custom ELResolver with this method:

    @Override
    public Class<?> getType(ELContext context, Object base, Object property) {
        if (base instanceof CompositeComponentExpressionHolder && property 
instanceof String) {
            ValueExpression expr = ((CompositeComponentExpressionHolder) 
base).getExpression((String) property);
            if (expr != null) {
                return expr.getType(context);
            }
        }
        return null;
    }

Remaining methods should return {{null}}/{{false}} i.e. do nothing.
  
> TagValueExpression.getType() returns null if the property in the managed bean 
> is null and the expression points to a facelets composite component attribute
> -----------------------------------------------------------------------------------------------------------------------------------------------------------
>
>                 Key: MYFACES-2552
>                 URL: https://issues.apache.org/jira/browse/MYFACES-2552
>             Project: MyFaces Core
>          Issue Type: Bug
>          Components: JSR-314
>    Affects Versions: 2.1.0
>            Reporter: Jakob Korherr
>            Assignee: Jakob Korherr
>         Attachments: MYFACES-2552-spec-proposal.patch
>
>
> if you have a facelets composite component with an attribute "test" that 
> points to a property in a managed bean (e.g. #{myBean.property}) which is 
> currently null and you refer to that attribute in the implementation via 
> #{cc.attrs.test} you can get the current value (null) or set a new value but 
> you cannot get the type of the property (e.g. String[]). However if the 
> property in the managed bean is non-null you can get the type.
> For example:
> <cc:interface name="mycomponent">
>     <cc:attribute name="test" required="true"/>
> </cc:interface>
> <cc:implementation>
>     <h:selectManyListbox value="#{cc.attrs.test}">
>         <f:selectItems value="#{some select items}"/>
>     </h:selectManyListbox>
> </cc:implementation>
> --> calling #{cc.attrs.test}.getType() will fail if #{cc.attrs.test} resolves 
> to null, but will work if #{cc.attrs.test} resolves to some valid value.
> This currently results in a NullPointerException in 
> _SharedRendererUtils.getConvertedUISelectManyValue().

--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Reply via email to