我有一个条件,我有一个注册表单,如果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执行此操作?
答案 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渲染属性而不是嵌套三元运算符。 在答案之外,您是否可能意味着将图像放在锚标记之间以便图像可以点击?