在jstl使用c:set 时,去设置一个变量,需要注意 变量的 scope 问题。设置一个值的行为,相当于,变量已经存在,则更新变量的值,不存在则建增值。
在项目中遇到这样的情况,已经设置了一个session级别的变量a(scope=session),当前页需要新建一个变量,恰好名称也为a。
<c:set var=”a” value=”b”/>
c:set 会首先查找变显是否存在,当未指定 scope 的情况下,查找的顺序为:page->request->session->application,一直往上找,直到找到为止。项目中遇到恰好在session级时找到同名变量存在,c:set 就会把session级的变量 更新了,但实际项目是在当前页创建一个变,在这情况下,就会产生意想不到的问题。
所以使用c:set的话,最好明确指定scope 避免不必要的错误。