在java标签中使用EL

时间:2012-02-15 12:09:08

标签: java jsp el scriptlet

我有一个属性,我已经从一个servlet转发到一个jsp文件,虽然我可以使用这个对象与EL我想知道如何在java标签内访问它。一个例子如下:

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

所以这里的结果是一个类型为Video的ArrayList,它从servlet转发到jsp

我想访问ArrayList内的<% %>代码,以执行一些我不能用EL执行的更多任务。

有人知道怎么做吗?

另一方面,我正在创建的这个ArrayList可能会变大。这个存放在哪里?在服务器或某些用户临时文件?如果它存储在服务器内存中,是否会在一段时间/事件(如请求ArrayList的用户关闭与服务器的连接)之后进行清理?

2 个答案:

答案 0 :(得分:1)

这完全取决于您存储列表的位置。如果您将它存储在请求属性中(而不是其他任何地方),那么在处理请求时它将有资格进行垃圾收集。

如果您将其存储在会话属性中,那么它将存储在服务器内存(和/或文件系统或数据库中,具体取决于容器配置),直到会话超时或无效,或直到您删除它。 HTTP是无状态协议。用户没有与服务器的连接。

<% %>之间的Java代码不是java标记。它的scriptlet,不应该在JSP中使用。如果你需要做一些EL或JSP标签不能轻易做到的事情,那么

  • 自己编写自定义JSP标记,将Java代码放在此JSP标记中,并从JSP调用标记,或
  • 或编写自定义EL函数,并从JSP
  • 调用此函数
  • 或在调度到JSP之前在控制器(servlet,MVC框架操作)中准备工作,以便JSP可以轻松生成标记。

可以使用与用于存储列表的setAttribute方法对应的getAttribute方法访问该列表:

HttpServletRequest.setAttribute() --> HttpServletRequest.getAttribute()
HttpSession.setAttribute() --> HttpSession.getAttribute()
ServletContext.setAttribute() --> ServletContext.getAttribute()

答案 1 :(得分:0)

我认为你应该使用像

这样的东西
<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>