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

pra*_*avi 31 jstl jsf-2

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

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

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

jmk*_*een 45

对于像我这样只是通过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>
Run Code Online (Sandbox Code Playgroud)

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


sku*_*sel 36

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

另一种解决方案是在一个元素的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>
Run Code Online (Sandbox Code Playgroud)


Rya*_*n D 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}"/>
Run Code Online (Sandbox Code Playgroud)

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