如果组合组件为空,如何不设置组件内部的属性?
Posted
技术标签:
【中文标题】如果组合组件为空,如何不设置组件内部的属性?【英文标题】:How not to set an attribute of a component inside a composite component if it is empty? 【发布时间】:2016-02-02 04:15:30 【问题描述】:我在这样的复合组件中有一个 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"
/>
</composite:implementation>
但是,如果某些属性未设置(例如宽度、高度),则它们会被渲染为空。在win7上的IE9中,这会导致img标签的宽度和高度属性被渲染为1。所以图像有1px的宽度和1px的高度。
【问题讨论】:
【参考方案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>
另见:
JSTL in JSF2 Facelets... makes sense?【讨论】:
非常感谢。但是,如果例如在支持 bean 中计算宽度属性并且组件根据 ajax 请求重新呈现/更新,这可能不起作用,对吗? 它确实只有在视图被隐式/显式重建时才有效。这取决于你的具体情况。只需尝试看看它是否适用于您的特定情况。另一种方法是覆盖和自定义渲染器。以上是关于如果组合组件为空,如何不设置组件内部的属性?的主要内容,如果未能解决你的问题,请参考以下文章