используя EL внутри тега Java - PullRequest
       22

используя EL внутри тега Java

0 голосов
/ 15 февраля 2012

У меня есть атрибут, который я перенаправил из сервлета в файл jsp, и хотя я могу использовать этот объект с EL, я хотел бы знать, как получить к нему доступ внутри тегов java. Примером является что-то вроде следующего:

 Searching for "${search_phrase}" returned
  <c:forEach var="video" items="${results}">
      ${video.getVideoName()}
      ${video.getVideoID()}       
  </c:forEach>

Таким образом, в результате получается ArrayList видео типа, которое пересылается из сервлета в jsp

Я хотел бы получить доступ к этим ArrayList внутри <% %> тегам, чтобы выполнить некоторые более сложные задачи, которые я не могу сделать с EL.

Кто-нибудь знает, как это сделать?

Кстати, это ArrayList, которое я создаю, потенциально может стать большим. Где это хранится? На сервере или у некоторых пользователей временные файлы? Если он хранится в памяти сервера, очищается ли он через некоторое время / событие, например, пользователь, который запросил ArrayList, закрывает соединение с сервером?

Ответы [ 2 ]

1 голос
/ 15 февраля 2012

Все зависит от того, где вы сохранили список. Если вы сохранили его в атрибуте запроса (и нигде больше), он будет иметь право на сборку мусора после обработки запроса.

Если вы сохранили его в атрибуте сеанса, то он будет храниться в памяти сервера (и / или файловой системы или базы данных в зависимости от конфигурации контейнера) до истечения времени ожидания или аннулирования сеанса или до удаления Это. HTTP - это протокол без сохранения состояния. У пользователя нет соединения с сервером.

Код Java между <% %> не является тегом Java. Это скриптлет, и его не следует использовать в JSP. Если вам нужно сделать что-то, что теги EL или JSP не могут сделать легко, то либо

  • напишите собственный тег JSP самостоятельно, поместите код Java в этот тег JSP и вызовите тег из JSP, или
  • или напишите пользовательскую функцию EL и вызовите эту функцию из JSP
  • или подготовьте работу в контроллере (сервлет, действие инфраструктуры MVC) перед отправкой в ​​JSP, чтобы JSP мог легко генерировать разметку.

Список доступен с помощью метода getAttribute, соответствующего методу setAttribute, который вы использовали для хранения списка:

HttpServletRequest.setAttribute() --> HttpServletRequest.getAttribute()
HttpSession.setAttribute() --> HttpSession.getAttribute()
ServletContext.setAttribute() --> ServletContext.getAttribute()
0 голосов
/ 15 февраля 2012

Я думаю, вы должны использовать что-то вроде

<c:forEach var="video" items="${results}">
 <c:forEach var="videoType" items="${video.types}">   //suppose videoType is an object

<c:out value="${videoTypeDetails}" />

 </c:forEach>             
 </c:forEach>
...