Java与jstl变量交互。
我们知道jstl和java api(或者说是<%%>方式)是很不相同的两种书写方式,他们之间的变量有些可以很好的传递,例如:
(1)<%%>变量在jstl中获取的例子:
<%
String username="zhangsan";
pageContext.setAttribute("username",username);
%>
<c:out value="${username}"/>
即:jsp 页面中<%%>中的变量在定义后,需要放置到pageContext属性中,才能被获取(当然也可以放置到request和session、 applicatio中,这要根据实际应用来做决定,一般只是在页面中使用的化,使用pageContext就可以了)。
(2)jstl变量在<%%>中获取的例子:
<c:set var="username" value="zhangsan"/>
<%
String username=(String)pageContext.getAttribute("username");
%>
上面为什么要在pageContext中来获取呢,因为c:set方式定义的变量默认是存放在pageContext的属性中的,当然了如果在定义是指定了作用范围,则也需要通过相应作用范围的页面对象来获取该属性,例如:
<c:set var="username" value="zhangsan" scope="session"/>
<%
String username=(String)session.getAttribute("username");
%>
另 外,还要注意一点,jstl中的许多操作都用到了var属性,例如c:forEach、c:import等等,这些var所代表的变量默认也是存放在 pageContext中的,当然有些标签还提供了scope属性,这也意味着其var所代表的变量会存放到scope指定的范围之中。