我已经创建了一个复合组件,如果以“静态”方式使用它似乎工作正常,但如果我将其中一个属性绑定到表达式,它就不起作用。
如果我使用我的组件
<ez:indicadorEstadoSubsistema subSystemName="Server"
status="someIntLiteral"/>
工作正常,但我需要以更动态的方式使用它,比如
<ez:indicadorEstadoSubsistema subSystemName="Server"
status="#{serverData.status}"/>
。
我已经读过JSTL标签在视图构建时运行而不是查看渲染时间,所以这可能是我没有在正确的时间获得状态表达式绑定评估的原因,但我不知道如何解决这个问题
我的组件只是带有工具提示的图像。它们都依赖于“status”属性值。
<cc:interface>
<cc:attribute name="status" shortDescription="Represents the SubSystem status." required="true" default="1" type="java.lang.Integer"/>
<cc:attribute name="subSystemName" required="true" type="java.lang.String"/>
</cc:interface>
<cc:implementation>
<c:choose>
<c:when test="#{cc.attrs.status eq 0}">
<h:graphicImage id="icon" value="#{resource['images:delete.png']}" width="16" height="16"/>
<c:set var="message" value="#{cc.attrs.subSystemName} subsystem doesn't responds."/>
</c:when>
<c:when test="#{cc.attrs.status eq 1}">
<h:graphicImage id="icon" value="#{resource['images:delete.png']}" width="16" height="16"/>
<c:set var="message" value="Unconsistent status."/>
</c:when>
<c:when test="#{cc.attrs.status eq 2}">
<h:graphicImage id="icon" value="#{resource['images:warning.png']}" width="16" height="16"/>
<c:set var="message" value="#{cc.attrs.subSystemName} system not working properly."/>
</c:when>
<c:when test="#{cc.attrs.status eq 3}">
<h:graphicImage id="icon" value="#{resource['images:check.png']}" width="16" height="16"/>
<c:set var="message" value="#{cc.attrs.subSystemName} system works fine."/>
</c:when>
</c:choose>
<p:tooltip for="icon" value="#{message}" showEffect="fade" hideEffect="fade" />
</cc:implementation>
谢谢。
答案 0 :(得分:2)
通常,在JSF中使用JSTL标记不是一个好主意。你为什么不用<h:panelGroup>
?尝试这样的事情:
<h:panelGroup rendered="#{cc.attrs.status eq 0}">
<h:graphicImage id="icon" value="#{resource['images:delete.png']}" width="16" height="16"/>
<ui:param var="message" value="#{cc.attrs.subSystemName} subsystem doesn't responds."/>
</h:panelGroup>
<p:tooltip for="icon" value="#{message}" showEffect="fade" hideEffect="fade" />