有条件地在dataList中的JSF中显示图像

时间:2014-07-08 08:16:35

标签: jsf jsf-2 primefaces el rendered-attribute

在带有primefaces dataList的迭代中我希望像这样有条件地渲染图像:

<ui:param name="curTriggerState" value="#{jobListController.getTriggerState(curJobTriggerInfo)}" />
<p:column rendered="#{showCurJobTrigger}">
    <h:outputText value="#{curTriggerState}" />
    <h:graphicImage value="/resources/images/triggerstate_none_48.png" 
        rendered="#{curTriggerState eq 'NONE'}" />
    <h:graphicImage value="/resources/images/triggerstate_normal_48.png" 
        rendered="#{curTriggerState eq 'NORMAL'}" />
    <h:graphicImage value="/resources/images/triggerstate_paused_48.png" 
        rendered="#{curTriggerState eq 'PAUSED'}" />
    <h:graphicImage value="/resources/images/triggerstate_complete_32.png" 
        rendered="#{curTriggerState eq 'COMPLETE'}" />
    <h:graphicImage value="/resources/images/triggerstate_error_48.png" 
        rendered="#{curTriggerState eq 'ERROR'}" />
    <h:graphicImage value="/resources/images/triggerstate_blocked_48.png" 
        rendered="#{curTriggerState eq 'BLOCKED'}" />
</p:column>

jobListController.getTriggerState返回在相应的render属性中检查的字符串。 ouputText打印出正确的状态。但是没有绘制图像。如果我设置渲染=&#34;真&#34;那么图像的路径是正确的。图像被绘制。 找不到我的错。认为ui:param可能是原因,但outputText打印出正确的字符串。

3 个答案:

答案 0 :(得分:0)

这有效......但我不喜欢它来生成图像的路径

<ui:param name="curTriggerStateName" value="#{jobListController.getTriggerStateName(curJobTriggerInfo)}" />
<h:graphicImage value="/resources/images/#{jobListController.getTriggerStatusImageName(curJobTriggerInfo)}" 
                        style="margin-right: 3px !important;"/>

答案 1 :(得分:0)

最后我更改了它以生成代码较少的文件名。但我一般不喜欢它在状态上生成文件的pathes并遵循文件名模式。但这有效:

<ui:param name="curTriggerStateName" value="#{jobListController.getTriggerStateName(curJobTriggerInfo)}" />
<h:graphicImage value="/resources/images/triggerstate_#{curTriggerStateName}_20.png" styleClass="triggerStateImage"
            title="#{curTriggerStateName}" />

答案 2 :(得分:0)

这是我的错。后端服务是此时的模拟,它随机返回触发状态。似乎支持bean(以及后端)不仅每个graphicImage调用一次,而且多次调用。当每个调用返回不同的触发状态时,图像和标题当然可以不同。我对此感到有些惊讶,因为我使用ui:param赋值,并认为每个graphicImage只调用一次backing bean方法。