我在JSP
中看到了类似下面的代码<c:if test="<%=request.isUserInRole(RoleEnum.USER.getCode())%>">
<li>user</li>
</c:if>
我对test
属性值中出现的“=”感到困惑。我的理解是<%= %>
中包含的任何内容都会打印到输出中,但是分配给test的值肯定必须是布尔值,那么为什么这样做呢?
对于奖励积分,有没有办法更改上面的属性值,使其不使用scriptlet代码?据推测,这意味着使用EL。
干杯, 唐
答案 0 :(得分:16)
test
属性查找以确定某些内容是否为true的所有内容都是字符串“true”(不区分大小写)。例如,以下代码将打印“Hello world!”
<c:if test="true">Hello world!</c:if>
<%= %>
中的代码返回一个布尔值,因此它将打印字符串“true”或“false”,这正是<c:if>
标记所查找的内容。
答案 1 :(得分:11)
你也可以使用
之类的东西<c:if test="${ testObject.testPropert == "testValue" }">...</c:if>
答案 2 :(得分:4)
&lt;%=%&gt;之间的表达式在c:if标记被评估之前评估。所以,假设| request.isUserInRole |返回| true |,您的示例将首先计算:
<c:if test="true">
<li>user</li>
</c:if>
然后执行c:if标记。
答案 3 :(得分:2)
JSP标记库中的属性通常可以是静态的,也可以在请求时解析。如果在请求时解析它们,JSP将在运行时解析它们的值并将输出传递给标记。这意味着您可以将任何JSP代码放入属性中,并且标记将根据产生的输出进行相应的操作。
如果查看jstl taglib文档,您可以看到哪些属性是reuest time,哪些属性不是。 http://java.sun.com/products/jsp/jstl/1.1/docs/tlddocs/index.html
答案 4 :(得分:0)
&LT;%=%GT;将自己发送到输出,在JSTL的上下文中,它将被评估为字符串