JSTL forEach использовать переменную в javacode - PullRequest
13 голосов
/ 13 ноября 2010

Я хочу использовать фактический предмет из моего c:forEach в <% JavaCode/JSPCode %>.Как мне получить доступ к этому предмету?

<c:forEach var="item" items="${list}">
   <% MyProduct p = (MyProduct) ${item}; %>   <--- ???
</c:forEach>

Ответы [ 2 ]

18 голосов
/ 13 ноября 2010

Все, что идет внутрь <% %>, должно быть действительным Java, а ${item} - нет. ${...} - это синтаксис JSP EL.

Вы можете сделать это так:

<c:forEach var="item" items="${list}">
   <% MyProduct p = (MyProduct) pageContext.getAttribute("item"); %>   
</c:forEach>

Однако это ужасный способ написания JSP. Почему вы хотите использовать скриптлеты, когда вы уже используете JSTL / EL? Очевидно, что вы помещаете что-то внутрь этого <forEach>, и что бы это ни было, вы сможете обойтись без использования скриптлета.

9 голосов
/ 13 ноября 2010

Не используйте скриптлеты (т. Е. Вещи между тегами <% %>. Это считается плохой практикой, поскольку поощряет помещать слишком много кода, даже бизнес-логики, в контекст представления. Вместо этого придерживайтесь выражений JSTL и ELисключительно. Попробуйте это:

<c:forEach var="item" items="${list}">
    <c:set var="p" value="${item}" />
</c:forEach>
...