JSTL标记中的测试属性
时间:2020-03-06 14:21:48 来源:igfitidea点击:
我在JSP中看到了一些类似于以下的代码
<c:if test="<%=request.isUserInRole(RoleEnum.USER.getCode())%>"> <li>user</li> </c:if>
我的困惑是因为出现在test
属性值中的" ="。我的理解是,在<%=%>中包含的所有内容都将打印到输出中,但是可以肯定的是,分配给test的值必须是布尔值,为什么这样做有效?
对于奖励积分,是否有任何方法可以更改上面的属性值,使其不使用scriptlet代码?据推测,这意味着使用EL代替。
干杯,
大学教师
解决方案
通常,JSP标记库中的属性可以是静态的,也可以在请求时解析。如果在请求时解析了它们,那么JSP将在运行时解析它们的值,并将输出传递给标记。这意味着我们可以将几乎任何JSP代码放入属性中,并且标记将根据产生的输出进行相应的行为。
如果查看jstl taglib文档,则可以看到哪些属性是最重要的时间,哪些不是。 http://java.sun.com/products/jsp/jstl/1.1/docs/tlddocs/index.html
<%=%>本身将被发送到输出,在JSTL的上下文中,它将被评估为一个字符串
<%=%>之间的表达式在评估c:if标记之前进行评估。因此,假设| request.isUserInRole |返回| true |,示例将首先被评估:
<c:if test="true"> <li>user</li> </c:if>
然后执行c:if标记。
测试属性用来确定是否为真的所有内容都是字符串" true"(不区分大小写)。例如,以下代码将打印" Hello world!"。
<c:if test="true">Hello world!</c:if>
<%=%>中的代码返回一个布尔值,因此它将打印字符串" true"或者" false",这正是<c:if>
标签所寻找的。
我们也可以使用类似
<c:if test="${ testObject.testPropert == "testValue" }">...</c:if>