JSF切换图像

时间:2011-02-24 11:00:09

标签: jsf tags icefaces

这是问题Using <c:when> with an enumeration

的后续问题

按照接受的答案提出建议后,我遇到了另一个问题。使用库函数部分生成实际图像路径(我的代码是示例代码)以获得主题图像路径。请理解我不允许透露真实的代码,所以当我在这里发帖时,我必须剪掉很多东西。

第一个问题是h:graphicImage使用当前portlet的路径自动为img标签生成绝对图像路径。示例:我需要http://myserver/mytheme/portlet/image.gif,但如果我使用<h:graphicsImage value="#{myNs:getThemePath()}image.gif" />,则会将其呈现为http://myserver/ myportlet /mytheme/portlet/image.gif;相反,使用<img src="#{myNs:getThemePath()}image.gif" />可以很好地工作。

正如另一个问题中所指出的,我需要根据ICEFaces表中迭代项的条件在图像之间切换, AND 我还需要(出于可访问性的原因)放置正确的{具有本地化资源的{1}}属性。

简而言之,我的代码类似于以下内容(alt省略)

ice:dataTable

src部分有效,但现在出现了问题。

如果我使用<h:column> <f:facet name="header"> <ice:outputText value="#{myNs:getLocale('state')}" /> </f:facet> <img alt="[[TODO]]" src="#{myNs:getThemePath()}#{item.state == 'COMPLETED' ? 'ok' : 'ko'}.gif" </h:column> 我无法嵌套表达式(它不会被评估)

如果我为这两种情况创建了两个alt="#myNs:getLocale('prefix.#{item.state = 'COMPLETED' ? 'completed' : 'canceled'}')}标记(不需要在<h:graphicsImage中使用复杂表达式)并使用alt属性,如另一个问题的接受答案中所述,我不要正确渲染图像URL。

我也无法使用rendered代码,因为正如其他问题所解释的那样,它总是被评估为false。

我可以做些什么来满足这两个要求?如何根据我的条件使用两个<c:when标签并切换渲染?

由于

[add]幸运的是,在组合表达式时,我在Tomcat日志上收到以下异常消息。有人可以帮我更好地学习EL表达吗?我是JSF的新手

<img

2 个答案:

答案 0 :(得分:5)

回答有条件地呈现普通香草HTML的能力的具体问题;只需将它们包装在一个支持rendered属性的JSF组件中,但它本身不输出任何内容。

<h:panelGroup rendered="#{item.state == 'COMPLETED'}">
    <img src="ok.gif" />
</h:panelGroup>
<h:panelGroup rendered="#{item.state == 'CANCELLED'}">
    <img src="ko.gif" />
</h:panelGroup>

当您使用Facelets时,也可以使用<ui:fragment>。它的开销略低一些。

答案 1 :(得分:1)

看起来我在10分钟内自己解决了这个问题。让我分享一下。

组合表达式是可行的,但不需要再次#{} !!!!多么愚蠢(我说我是初学者?)

#{item.state = 'COMPLETED' ? myNs:getLocale('prefix.completed') myNs:getLocale('prefix.canceled')}

作品