如果复合组件为空,如何不在复合组件内设置组件的属性?

How not to set an attribute of a component inside a composite component if it is empty?

我在这样的复合组件中有一个 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 标签的宽度和高度属性呈现为 1。因此图像具有 1px 宽度和 1px 高度。

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

另请参阅:

  • JSTL in JSF2 Facelets... makes sense?