如果组件属于空,如何在组件内部设置属性?

时间:2015-11-02 09:56:36

标签: jsf attributes jsf-2.2 composite-component conditional-rendering

我在这样的复合组件中有一个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>

但是,如果未设置某些属性(例如宽度,高度),则它们会呈现为空。在win7的IE9中,这会导致img标签的width和height属性呈现为1.因此图像的宽度为1px,高度为1px。

1 个答案:

答案 0 :(得分:3)

您可以通过<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>

另见: