这是问题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
答案 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')}
作品