Ошибка преобразования типа EL в JSF 2 Composite Component - PullRequest
4 голосов
/ 07 июня 2011

У меня есть составной компонент JSF с выражением EL в части интерфейса, фрагмент кода ниже.

<cc:interface>
     <cc:attribute name="label" type="java.lang.String"/>
     <cc:attribute name="labelRendered" default="#{cc.attrs.label ne null}"/>
</cc:interface>
<cc:implementation>
     <h:outputText rendered="#{cc.attrs.labelRendered}" value="#{cc.attrs.label}"/>
</cc:implementation>

Теперь моя проблема в том, что "default =" # {cc.attrs.label ne null} "выдает ошибку.

java.lang.IllegalArgumentException: Cannot convert /resources/cc/label.xhtml @20,85 default="#{cc.attrs.label != null}" of type class com.sun.faces.facelets.el.TagValueExpression to class java.lang.Boolean

Я использую JSF 2.0.4, EL 2.1, WAS 7

1 Ответ

7 голосов
/ 07 июня 2011

#{cc.attrs} доступен только внутри <cc:implementation>.

Я бы предложил переписать его следующим образом:

<cc:interface>
    <cc:attribute name="label" type="java.lang.String"/>
    <cc:attribute name="labelRendered" type="java.lang.Boolean" />
</cc:interface>
<cc:implementation>
    <ui:param name="labelRendered" value="#{empty cc.attrs.labelRendered ? not empty cc.attrs.label : cc.attrs.labelRendered}" />
    ...
    <h:outputText rendered="#{labelRendered}" value="#{cc.attrs.label}"/>
</cc:implementation>
...