当属性表达式绑定时,复合组件不起作用

时间:2014-03-31 10:05:38

标签: jsf jsf-2 primefaces composite-component

我已经创建了一个复合组件,如果以“静态”方式使用它似乎工作正常,但如果我将其中一个属性绑定到表达式,它就不起作用。

如果我使用我的组件

<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>

谢谢。

1 个答案:

答案 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" />