You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何正确比较Scriptlet与JSTL定义的变量?JSP代码报错求助

解决Scriptlet与JSTL变量比较的EL表达式错误问题

嘿,我来帮你搞定这个问题!你遇到的错误根源在于<c:if>测试条件里的EL表达式写法不对,咱们一步步理清楚:

问题出在哪?

你在测试条件里写了${request.getAttribute('count') < max},但EL表达式的设计初衷就是简化域对象属性的访问,完全不需要手动调用getAttribute()方法。这种写法不仅多余,还会导致容器解析EL表达式时出错——因为EL里的方法调用语法不是这样的,而且完全没必要绕这个弯。

当你通过Scriptlet的request.setAttribute("count", count)把变量存入request域后,EL会自动按照pageScope→requestScope→sessionScope→applicationScope的顺序查找名为count的变量,直接用${count}就能拿到它。

修正后的正确代码

把<c:if>的测试条件改成下面这样就可以正常工作了:

<% int count = 1; request.setAttribute("count", count); %>
<c:set var="max" scope="request" value="${100}" />
<c:if test="${count < max}" > 
  <!-- 这里写你的业务逻辑 -->
</c:if>

额外优化建议:统一使用JSTL写法

其实Scriptlet是比较老旧的写法,现代JSP更推荐全程使用JSTL+EL来避免混合写法带来的问题,你可以把Scriptlet的代码也换成JSTL的<c:set>,让代码更整洁规范:

<c:set var="count" scope="request" value="${1}" />
<c:set var="max" scope="request" value="${100}" />
<c:if test="${count < max}" > 
  <!-- 这里写你的业务逻辑 -->
</c:if>

这样既符合JSP的最佳实践,也能减少类似的语法错误~

内容的提问来源于stack exchange,提问作者PiotrChernin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 11:44:16