【发布时间】:2014-05-10 15:05:39
【问题描述】:
我制作了一个复合组件,如果以“静态”方式使用它似乎可以正常工作,但如果我将它的一个属性绑定到表达式,它就不起作用了。
如果我使用像
这样的组件<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>
谢谢。
【问题讨论】:
-
什么时候设置 #{serverData.status} 中的值?
-
在一个名为
public void updateStatus()的方法中,当用户按下命令按钮时会调用该方法。<p:commandButton id="cmdRefresh" value="Refresh" actionListener="#{serverData.updateStatus()}/> -
这是和ajax请求在同一个页面上还是在另一个页面上执行并且updateStatus()的结果是导航到当前页面?
-
与Ajax请求在同一页面调用。
-
我认为这行不通,原因是如果您在数据表中使用组件,则应按行评估 EL 表达式,但标签如 c:if、c:set 或c:在构建视图时选择工作。您应该重构代码以使用渲染属性或在 EL 表达式中添加条件。如果需要,可以使用 c:set 使表达式更短。
标签: jsf jsf-2 primefaces composite-component