有条件地基于<h:outputtext> </h:outputtext> </div>的值呈现<div>

时间:2015-04-21 07:37:17

标签: jsf conditional-rendering

我正在使用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>

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

3 个答案:

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