35

我有一个条件,我有一个注册表单,如果用户 ID 为 0,它应该显示虚拟图像,当我从任何更新编辑用户时,我检查用户 ID 是否不等于 0,然后显示与用户 ID 对应的图像。

我在 jsf 页面中使用了 JSTL。但它总是试图去 else 循环来显示图像。该功能运行良好。唯一的事情是我第一次访问页面时无法显示虚拟图像。这是我的代码:

<c:if test="${'#{user.userId}' == '0'}">
  <a href="Images/thumb_02.jpg" target="_blank" ></a>
  <img src="Images/thumb_02.jpg" />
</c:if>
<c:otherwise>
  <a href="/DisplayBlobExample?userId=#{user.userId}" target="_blank"</a>
  <img src="/DisplayBlobExample?userId=#{user.userId}" />
</c:otherwise>

我可以使用这个 JSTL 标签还是使用 jsf 来做?

4

3 回答 3

53

对于像我这样刚刚通过 skuntsel 跟踪代码并收到神秘堆栈跟踪的人,请允许我为您节省一些时间。

它似乎c:if不能单独跟随c:otherwise

正确的解决方案如下:

<c:choose>
    <c:when test="#{some.test}">
        <p>some.test is true</p>
    </c:when>
    <c:otherwise>
        <p>some.test is not true</p>
    </c:otherwise>
</c:choose>

您可以根据需要添加其他c:when测试。

于 2014-04-02T09:19:22.477 回答
39

嵌套 EL 表达式是非法的:你应该内联它们。在您的情况下,使用 JSTL 是完全有效的。纠正错误,您将使代码正常工作:

<html xmlns="http://www.w3.org/1999/xhtml" xmlns:c="http://java.sun.com/jstl/core">
    <c:if test="#{not empty user or user.userId eq 0}">
        <a href="Images/thumb_02.jpg" target="_blank" ></a>
        <img src="Images/thumb_02.jpg" />
    </c:if>
    <c:if test="#{empty user or user.userId eq 0}">
        <a href="/DisplayBlobExample?userId=#{user.userId}" target="_blank"></a>
        <img src="/DisplayBlobExample?userId=#{user.userId}" />
    </c:if>
</html>

另一种解决方案是在一个元素的 EL 中指定您想要的所有条件。虽然它可能更重且可读性更低,但它是:

<a href="#{not empty user or user.userId eq 0 ? '/Images/thumb_02.jpg' : '/DisplayBlobExample?userId='}#{not empty user or user.userId eq 0 ? '' : user.userId}" target="_blank"></a>
<img src="#{not empty user or user.userId eq 0 ? '/Images/thumb_02.jpg' : '/DisplayBlobExample?userId='}#{not empty user or user.userId eq 0 ? '' : user.userId}" target="_blank"></img>
于 2013-07-11T08:53:06.087 回答
7

除了使用“c”标签,您还可以执行以下操作:

<h:outputLink value="Images/thumb_02.jpg" target="_blank" rendered="#{not empty user or user.userId eq 0}" />
<h:graphicImage value="Images/thumb_02.jpg" rendered="#{not empty user or user.userId eq 0}" />

<h:outputLink value="/DisplayBlobExample?userId=#{user.userId}" target="_blank" rendered="#{not empty user and user.userId neq 0}" />
<h:graphicImage value="/DisplayBlobExample?userId=#{user.userId}" rendered="#{not empty user and user.userId neq 0}"/>

我认为这比 skuntsel 的替代答案更具可读性,并且正在利用 JSF 渲染属性而不是嵌套三元运算符。答案是,您是否可能打算将您的图像放在锚标签之间,以便图像可点击?

于 2015-09-03T17:19:47.030 回答