我正在使用jsf primefaces。我想根据特定的outputext的值显示图像。如果文本值为“Alarm *”,则会出现一个带有特定图像的div。如果值为'Alarm **',则会出现带有其他图像的div等。我尝试了下面的代码,但它对我不起作用。
<h:outputText id="alarmCriticalityValue" value="#{msg[summary.criticality.key]}" />
<c:if test="#{alarmCriticalityValue=='Alarm *'}">
<div class="alarm1"></div>
</c:if>
我应该如何实现这个想法?
答案 0 :(得分:3)
您需要使用binding
属性将UIComponent
实例放入EL范围。与您的预期相反,id
属性不会这样做。
<h:outputText binding="#{alarmCriticality}" ... />
然后您需要使用UIOutput#getValue()
来获取其value
属性。
<c:if test="#{alarmCriticality.value == 'Alarm *'}">
也就是说,你最好在这里使用rendered
属性,特别是如果#{summary}
表示JSF迭代组件的当前迭代项,如<ui:repeat>
或<h:dataTable>
。< / p>
<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'}" />
这样您也不需要再绑定输出文本了。
答案 1 :(得分:0)
尝试
<c:if test="#{msg[summary.criticality.key].equals('Alarm *')}">
或者向binding
添加h:outputText
并对其进行检查。
答案 2 :(得分:0)
试试这个
<h:outputText id="alarmCriticalityValue" value="#{msg[summary.criticality.key]}" />
<h:panelGroup layout="block" styleClass="alarm1" rendered="#{alarmCriticality.value eq 'Alarm *'}" />