JSP EL表达式无法识别已声明的ArrayList变量,该如何解决?
JSP EL无法识别ArrayList变量的修复方案
核心原因:EL表达式仅能读取page、request、session、application四个作用域中存储的属性,你在JSP脚本中直接声明的ArrayList属于页面局部变量,不在EL的检索范围内,所以无法识别。
具体修复步骤:
- 第一步:将你声明的ArrayList存入对应作用域,根据使用场景选择:
仅当前页面使用就存入page域:
如果是请求跳转后仍要使用就存入request域,会话内通用存session域,全局所有用户通用存application域,对应代码分别为<% // 你原来声明ArrayList的代码 ArrayList<String> dataList = new ArrayList<>(); dataList.add("示例数据1"); dataList.add("示例数据2"); // 新增代码:将变量存入page域,自定义属性名后续EL用这个名访问 pageContext.setAttribute("dataList", dataList); %>request.setAttribute("dataList", dataList)、session.setAttribute("dataList", dataList)、application.setAttribute("dataList", dataList)。 - 第二步:直接用EL表达式访问你设置的属性名即可,比如配合JSTL遍历列表:
首先确保页面头部引入JSTL核心标签库:
遍历代码:<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %><c:forEach items="${dataList}" var="item"> <p>${item}</p> </c:forEach> - 异常排查:如果还是无法访问,检查web.xml配置的Servlet版本是否在2.3以上,同时确认页面头部没有设置
isELIgnored="true"禁用EL表达式。
内容的提问来源于stack exchange,提问作者DAEHYUN KIM
相关产品推荐
相关产品推荐

