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

JSP中如何通过EL表达式获取程序动态构造id的元素

问题核心原因

EL表达式语法不支持嵌套${}结构,因此${table_${num}}属于非法写法,无法被容器正常解析。
你尝试的${parent_element.children().get(0)}写法失效,是因为低于3.0版本的EL不支持直接调用对象的普通方法,仅支持访问符合JavaBean规范的get/set属性,兼容性较差。

可用解决方案

方案1:使用<c:set>预拼接变量名(兼容性最好)

先通过JSTL的<c:set>标签拼接出完整的属性key,再通过EL的[]操作符从对应域中读取属性:

<!-- 首先导入JSTL核心标签库,放在JSP顶部 -->
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

<!-- 拼接属性key -->
<c:set var="tableAttrKey" value="table_${num}" />

<!-- 从对应域中读取属性,默认按page>request>session>application顺序查找 -->
${pageContext.findAttribute(tableAttrKey)}

如果你明确知道属性存放在哪个域,可以直接指定域对象提升性能:

  • 存放在page域:${pageScope[tableAttrKey]}
  • 存放在request域:${requestScope[tableAttrKey]}
  • 存放在session域:${sessionScope[tableAttrKey]}
  • 存放在application域:${applicationScope[tableAttrKey]}

方案2:EL3.0+ 直接使用concat函数拼接

如果你的项目使用EL3.0及以上版本,可以省略<c:set>步骤,直接拼接key读取:

${pageScope[concat('table_', num)]}

注意事项

  • 需确保变量num已经在对应的作用域中存在,且值为合法的数字/字符串类型
  • 若项目未引入JSTL,也可以通过少量脚本代码实现拼接,但不推荐在JSP中嵌入脚本:
<%
int num = (int) request.getAttribute("num");
pageContext.setAttribute("tableAttrKey", "table_" + num);
%>
${tableAttrKey}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.14 11:00:13