JSF切换图像

usr*_*ΛΩΝ 1 tags jsf icefaces

这是使用枚举时使用<c:when>的问题的后续问题

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

第一个问题是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表中迭代项的条件在图像之间切换,并且我还需要(出于可访问性的原因)alt使用本地化资源放置正确的属性.

简而言之,我的代码类似于以下(ice:dataTable省略)

<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>
Run Code Online (Sandbox Code Playgroud)

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

如果我使用alt="#myNs:getLocale('prefix.#{item.state = 'COMPLETED' ? 'completed' : 'canceled'}')}我不能嵌套表达式(它不会被评估)

如果我<h:graphicsImage为这两种情况创建两个标签(不需要使用复杂的表达式alt)并使用rendered另一个问题的接受答案中描述的属性,我不会正确呈现图像URL.

我也不能使用<c:when标签,因为正如另一个问题所解释的那样,它总是被评估为假.

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

谢谢

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

Caused by: org.apache.el.parser.ParseException: Encountered "#" at line 1, column 32.
Was expecting one of:
    <INTEGER_LITERAL> ...
    <FLOATING_POINT_LITERAL> ...
    <STRING_LITERAL> ...
    "true" ...
    "false" ...
    "null" ...
    "(" ...
    "!" ...
    "not" ...
    "empty" ...
    "-" ...
    <IDENTIFIER> ...
    <FUNCTION_CALL> ...
Run Code Online (Sandbox Code Playgroud)

Bal*_*usC 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>
Run Code Online (Sandbox Code Playgroud)

您也<ui:fragment>可以在使用Facelets时使用.它的开销略低.