Как не установить атрибут компонента внутри составного компонента, если он пустой?

У меня есть h:graphicImage в составном компоненте, например:

<composite:interface>
    <composite:attribute name="name" required="true" type="java.lang.String" />
    <composite:attribute name="alt" required="false" type="java.lang.String" />
    <composite:attribute name="height" required="false" type="java.lang.String" />
    <composite:attribute name="width" required="false" type="java.lang.String" />
</composite:interface>

<composite:implementation>

    <h:graphicImage url="something-common#{cc.attrs.name}"
                alt="#{cc.attrs.alt}"
                height="#{cc.attrs.height}"
                width="#{cc.attrs.width}" />

</composite:implementation>

Это работает, однако, если некоторые атрибуты не установлены (например, ширина, высота), они отображаются пустыми. В IE9 на win7 это приводит к тому, что атрибут ширины и высоты тега img отображается как 1. Таким образом, изображения имеют ширину 1 пиксель и высоту 1 пиксель.


person Filip Majernik    schedule 02.11.2015    source источник


Ответы (1)


Вы можете условно добавить атрибуты через <c:if><f:attribute>.

<h:graphicImage ...>
    <c:if test="#{not empty cc.attrs.height}"><f:attribute name="height" value="#{cc.attrs.height}" /></c:if>
    <c:if test="#{not empty cc.attrs.width}"><f:attribute name="width" value="#{cc.attrs.width}" /></c:if>
</h:graphicImage>

Смотрите также:

person BalusC    schedule 02.11.2015
comment
Спасибо большое. Но это, вероятно, не сработает, если, например, атрибут ширины вычисляется в поддерживающем bean-компоненте, а компонент перерисовывается/обновляется по запросу ajax, я прав? - person Filip Majernik; 02.11.2015
comment
Это действительно будет работать, только если представление неявно/явно перестроено в этот момент. Это зависит от вашего конкретного случая. Просто попробуйте и посмотрите, работает ли это в вашем конкретном случае. Альтернативой может быть переопределение и настройка средства визуализации. - person BalusC; 02.11.2015