Spring MVC JSP:Java代码片段变量无法外部访问怎么办?
解决方案:JSP脚本变量无法被EL表达式访问的问题
这个问题的核心是JSP脚本变量和EL表达式的作用域不互通,我给你两种解决方案,优先推荐第一种更规范的写法:
1. 直接利用<c:forEach>的varStatus属性(推荐)
你已经在<c:forEach>里声明了varStatus="loop",这个对象本身就内置了循环相关的索引/计数变量,完全不需要自己定义i:
${loop.index}:从0开始的循环索引(正好对应你想定义的i初始值)${loop.count}:从1开始的循环计数
修改后的代码示例:
<c:forEach items="${dbEntries}" var="c" varStatus="loop"> <tr> <!-- 直接用loop.index替代你原来的i --> <td>${loop.index}</td> <td rowspan="1">${c.rh_name}</td> <!-- EL会自动调用getRh_name(),写法更简洁 --> <td rowspan="1">${c.ipm_name}</td> </tr> </c:forEach>
小提示:EL表达式里直接写
${c.rh_name}即可,不需要手动调用getRh_name(),EL会自动匹配对应的getter方法,这是更符合JSP规范的写法。
2. 把脚本变量存入EL可访问的作用域(不推荐,仅作兼容参考)
如果你一定要保留脚本变量的写法,需要把i存入EL能识别的作用域(比如page作用域),这样${i}才能访问到:
<c:forEach items="${dbEntries}" var="c" varStatus="loop"> <tr> <% int i = 0; System.out.println(i); // 将局部变量i存入page作用域,让EL可以查找 pageContext.setAttribute("i", i); %> <td>${i}</td> <td rowspan="1">${c.rh_name}</td> <td rowspan="1">${c.ipm_name}</td> </tr> </c:forEach>
为什么原来的
${i}访问不到?因为<% %>里定义的是JSP生成的Servlet中的局部变量,而EL表达式是从page/request/session/application这些作用域中查找属性,两者不在同一个上下文空间,所以直接访问不到。
内容的提问来源于stack exchange,提问作者Bidipta Dauka
相关产品推荐
相关产品推荐

