如何使用if,否则在jsf条件下显示图像

时间:2013-07-11 07:19:31

标签: jsf-2 jstl

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

我在jsf页面中使用了JSTL。但总是试图去其他循环显示图像。功能正常。唯一的事情是我首先访问页面时无法显示虚拟图像。这是我的代码。:

<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执行此操作?

3 个答案:

答案 0 :(得分:40)

对于那些喜欢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测试。

答案 1 :(得分:34)

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

<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>

另一个解决方案是在一个元素的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>

答案 2 :(得分: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渲染属性而不是嵌套三元运算符。 在答案之外,您是否可能意味着将图像放在锚标记之间以便图像可以点击?