var 是一个静态属性,用于公开当前元素(正文的本地元素)
如何通过scriptlet / expression访问var属性?
初始化代码
<%
Employee e = new Employee();
e.setName("name");
e.setEmail("abc@gmail.com");
java.util.List<Employee> empList = new java.util.ArrayList();
empList.add(e);
request.setAttribute("empList", empList); %>
forEach code 1 deferredExpression错误
<c:forEach var="emp" items="${employees}">
<c:out value="${emp.name}"/><br><%=emp.getName()%>
</c:forEach>
NOR
forEach code 2 deferredExpression错误
<c:forEach var="emp" items="${empList}" varStatus="status">
Emp email: <%= ((Employee)(pageContext.findAttribute("emp"))).getName() %>
</c:forEach>
答案 0 :(得分:5)
由于我有不同版本的JSTL库,每次更改时都有java.lang.NoSuchFieldError:deferredExpression,现在我只留下一个jstl-1.2.jar more info about JSTL。
JSTL文档文档清楚地说明了“当前迭代项目的导出范围变量的名称。此范围变量具有嵌套可见性。”嵌套意味着从开始标记到结束标记。
EL代码
<c:forEach begin="0" end="5" var="countvar">
Iteration number ${ countvar + 24 }
</c:forEach>
替代JSP脚本
<c:forEach begin="0" end="5" var="countvar">
Iteration number
<%= ((Integer) (pageContext.findAttribute("cv")).intValue()+24 %>
</c:forEach>
另一个c:forEach示例,带有集合
<%
Employee e = new Employee();
e.setName("name");
e.setEmail("abc@gmail.com");
java.util.List<Employee> empList = new java.util.ArrayList();
empList.add(e);
request.setAttribute("empList", empList);
%>
<c:forEach var="emp" items="${empList}" varStatus="status">
Emp email: <%= ((Employee)(pageContext.findAttribute("emp"))).getName() %>
</c:forEach>
答案 1 :(得分:3)
我使用以下一般代码:
<c:forEach items="<%= itemList %>" var="item">
<%
ItemClass item = (ItemClass)pageContext.getAttribute("item");
%>
<p>Value with scriptlet: <%= item.getValue() %></p>
<p>Value with EL ${item.value}</p>
</c:forEach>
你的EL案例:
<c:forEach var="emp" items="<%= empList %>" varStatus="status">
${emp.name} email: ${emp.email}
</c:forEach>
您使用scriptlet的情况:
<c:forEach var="emp" items="<%= empList %>" varStatus="status">
<%
Employee employee = (Employee)pageContext.getAttribute("emp");
%>
<%= employee.getName() %> email: <%= employee.getEmail() %>
</c:forEach>
答案 2 :(得分:-1)
<c:forEach var="emp" items="${empList}" varStatus="status">
<c:out value="Emp email: ${emp.email}"/>
</c:forEach>