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

如何在JSP自定义.tag标签文件中访问对应JSP页面的变量

答案

默认情况下你无法直接在tagsDemo.tag中通过${id}获取demo.jsp里定义的page作用域id变量。

原因说明

JSP标签文件(.tag)拥有独立的PageContext页面上下文,你在demo.jsp中写的<c:set var="id" value="48848"></c:set>没有显式指定作用域,默认会把变量存入当前JSP页面的page作用域,该作用域的变量仅在demo.jsp自身的上下文内生效,标签文件默认无法直接读取。

可行的实现方案

你可以根据自己的场景选下面任意一种方式实现变量访问:

  • 方案1(最规范推荐):调用标签时显式传参
    这是自定义标签的标准用法,耦合度最低,可维护性最好:
    1. 在demo.jsp调用标签的位置,把变量作为标签属性传入:
    <t:tagsDemo id="${id}" />
    
    1. 在tagsDemo.tag文件开头声明接收的属性:
    <%@ attribute name="id" required="true" type="java.lang.Integer" %>
    
    1. 声明完成后,直接在标签文件里用${id}就能拿到传入的值。
  • 方案2:扩大变量作用域
    如果你不想传参,可以在demo.jsp定义变量时显式指定共享范围的作用域,修改<c:set>标签增加scope属性:
    <!-- 存入request作用域,当前请求内所有资源都能访问 -->
    <c:set var="id" value="48848" scope="request"></c:set>
    
    改完之后不需要额外配置,直接在tagsDemo.tag里写${id}就能取到值,session、application作用域同理也可以直接访问,但注意这两个作用域的变量生命周期更长,非必要不要随意使用避免变量污染。
  • 方案3(不推荐):跨上下文查找属性
    如果你既不想传参也不想改变量作用域,可以直接在标签文件里用JSP上下文的查找方法获取变量:
    ${jspContext.findAttribute("id")}
    
    这个方法会依次从page、request、session、application四个作用域遍历查找对应名称的属性,能拿到demo.jsp里定义的page作用域id值,但这种写法强依赖调用页的变量名,耦合度极高,正式项目不要用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 00:31:15