我有一个属性,我已经从一个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
的用户关闭与服务器的连接)之后进行清理?
答案 0 :(得分:1)
这完全取决于您存储列表的位置。如果您将它存储在请求属性中(而不是其他任何地方),那么在处理请求时它将有资格进行垃圾收集。
如果您将其存储在会话属性中,那么它将存储在服务器内存(和/或文件系统或数据库中,具体取决于容器配置),直到会话超时或无效,或直到您删除它。 HTTP是无状态协议。用户没有与服务器的连接。
<% %>
之间的Java代码不是java标记。它的scriptlet,不应该在JSP中使用。如果你需要做一些EL或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>