JSTL forEach использует переменную в javacode

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

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

person Christian 'fuzi' Orgler    schedule 13.11.2010    source источник


Ответы (2)


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

<c:forEach var="item" items="${list}">
    <c:set var="p" value="${item}" />
</c:forEach>
person Asaph    schedule 13.11.2010

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

Вы можете сделать это следующим образом:

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

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

person skaffman    schedule 13.11.2010