【发布时间】:2011-05-09 14:19:33
【问题描述】:
我想在<% JavaCode/JSPCode %> 中使用我的c:forEach 中的实际项目。
如何访问此项目?
<c:forEach var="item" items="${list}">
<% MyProduct p = (MyProduct) ${item}; %> <--- ???
</c:forEach>
【问题讨论】:
我想在<% JavaCode/JSPCode %> 中使用我的c:forEach 中的实际项目。
如何访问此项目?
<c:forEach var="item" items="${list}">
<% MyProduct p = (MyProduct) ${item}; %> <--- ???
</c:forEach>
【问题讨论】:
<% %> 中的任何内容都必须是有效的 Java,而 ${item} 不是。 ${...} 是 JSP EL 语法。
你可以这样做:
<c:forEach var="item" items="${list}">
<% MyProduct p = (MyProduct) pageContext.getAttribute("item"); %>
</c:forEach>
但是,这是编写 JSP 的一种可怕方式。当您已经在使用 JSTL/EL 时,为什么还要使用 scriptlet?显然你在 <forEach> 里面放了一些东西,不管它是什么,你应该可以不使用 scriptlet 来做。
【讨论】:
不要使用 scriptlet(即 <% %> 标记之间的东西。这被认为是不好的做法,因为它鼓励在视图上下文中放置太多代码,甚至是业务逻辑。相反,坚持使用 JSTL 和 EL 表达式独家。试试这个:
<c:forEach var="item" items="${list}">
<c:set var="p" value="${item}" />
</c:forEach>
【讨论】: