【发布时间】:2010-09-10 17:46:29
【问题描述】:
我在一个 JSP 中看到了一些类似下面的代码
<c:if test="<%=request.isUserInRole(RoleEnum.USER.getCode())%>">
<li>user</li>
</c:if>
我的困惑在于出现在test 属性值中的“=”。我的理解是 <%= %> 中包含的任何内容都会打印到输出中,但分配给 test 的值肯定是布尔值,那么为什么会这样呢?
对于加分,有没有办法改变上面的属性值,使其不使用scriptlet代码?据推测,这意味着使用 EL。
干杯, 唐
【问题讨论】:
-
仅当它出现在 JSP 标记之外时才会打印到输出,如下面的答案所述。但是,它确实不 被评估为字符串,而是转换为属性期望的任何类型。
<c:if>标签的test属性是boolean类型,因此无论脚本返回什么表达式都将被强制转换为boolean。 -
虽然有趣的是,如果您在 JSP 标记属性中混合字符串和 scriptlet,引擎会感到困惑并将整个值解释为字符串。也就是说,
<c:if test="abc<%= true %>">不会执行 scriptlet,而是通过返回false的Boolean.valueOf()将字符串abc<%= true %>强制转换为布尔值。 stackoverflow.com/questions/8168821/…