如何正确比较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
相关产品推荐
相关产品推荐

