3

我正在使用 jsf primefaces。我想根据特定输出文本的值显示图像。如果文本值为 'Alarm *',则会出现一个带有特殊图像的 div。如果值为'Alarm **',则会出现一个带有其他图像的 div,等等。我尝试了下面的代码,但它对我不起作用。

<h:outputText id="alarmCriticalityValue" value="#{msg[summary.criticality.key]}" />

<c:if test="#{alarmCriticalityValue=='Alarm *'}">
   <div class="alarm1"></div>
</c:if>

我应该如何实现这个想法?

4

3 回答 3

4

您需要使用binding属性将UIComponent实例放在 EL 范围内。与您的预期相反,该id属性不会这样做。

<h:outputText binding="#{alarmCriticality}" ... />

然后你需要使用UIOutput#getValue()来获取它的value属性。

<c:if test="#{alarmCriticality.value == 'Alarm *'}">

也就是说,您最好rendered在此处使用属性,特别是如果#{summary}表示 JSF 迭代组件的当前迭代项,如<ui:repeat>or <h:dataTable>

<h:panelGroup layout="block" styleClass="alarm1"
    rendered="#{alarmCriticality.value == 'Alarm *'}" />

也可以看看:


与具体问题无关。看到条件渲染依赖于本地化文本很奇怪。如果您更改语言环境和/或本地化文本怎么办?这是非常脆弱的。您最好检查捆绑密钥。

<h:outputText value="#{msg[summary.criticality.key]}" />
<h:panelGroup layout="block" styleClass="alarm1" 
    rendered="#{summary.criticality.key == 'some.alarm.key'}" />

这样您也不再需要绑定输出文本。

于 2015-04-21T07:44:07.737 回答
1

尝试

<c:if test="#{msg[summary.criticality.key].equals('Alarm *')}">

或者添加一个bindingh:outputText检查。

于 2015-04-21T07:45:09.837 回答
1

尝试这个

<h:outputText id="alarmCriticalityValue" value="#{msg[summary.criticality.key]}" />
    <h:panelGroup layout="block" styleClass="alarm1" rendered="#{alarmCriticality.value eq 'Alarm *'}" />
于 2015-04-21T09:16:06.177 回答