0

我有一个属性,我已经从一个 serverlet 转发到一个 jsp 文件,虽然我可以将此对象与 EL 一起使用,但我想知道如何在 java 标记中访问它。一个示例类似于以下内容:

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

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

我想访问这个ArrayList内部<% %>标签,以执行一些我不能用 EL 完成的更复杂的任务。

有人知道怎么做吗?

附带说明一下,ArrayList我正在创建的这个可能会变大。这个存储在哪里?在服务器上还是在某些用户的临时文件中?如果它存储在服务器内存中,它是否会在一段时间后/某个事件(例如请求ArrayList关闭与服务器的连接的用户)后被清除?

4

2 回答 2

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()
于 2012-02-15T12:21:14.900 回答
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>
于 2012-02-15T12:25:28.057 回答