JSTL中的test属性<c:if> tag </c:if>

时间:2008-09-18 15:07:21

标签: java jsp jstl

我在JSP

中看到了类似下面的代码
<c:if test="<%=request.isUserInRole(RoleEnum.USER.getCode())%>">
    <li>user</li>
</c:if>

我对test属性值中出现的“=”感到困惑。我的理解是<%= %>中包含的任何内容都会打印到输出中,但是分配给test的值肯定必须是布尔值,那么为什么这样做呢?

对于奖励积分,有没有办法更改上面的属性值,使其不使用scriptlet代码?据推测,这意味着使用EL。

干杯, 唐

5 个答案:

答案 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的上下文中,它将被评估为字符串