在java标记中使用EL
我有一个从servlet转发到jsp文件的属性,虽然我可以将这个对象与EL一起使用,但我想知道如何在java标记中访问它。例如,如下所示:在java标记中使用EL,java,jsp,el,scriptlet,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>
Searching for "${search_phrase}" returned
<c:forEach var="video" items="${results}">
${video.getVideoName()}
${video.getVideoID()}
</c:forEach>
搜索“${search\u phrase}”返回
${video.getVideoName()}
${video.getVideoID()}
因此,这里的结果是一个类型为Video的ArrayList
,它从servlet转发到jsp
我想访问ArrayList
内的
标记,以便执行一些我无法使用EL执行的更复杂的任务
有人知道怎么做吗
另一方面,我正在创建的
ArrayList
可能会变得更大。这个存放在哪里?在服务器上还是在某些用户的临时文件中?如果它存储在服务器内存中,是否会在一段时间/一个事件(例如请求ArrayList
的用户关闭与服务器的连接)后被清除 这完全取决于您将列表存储在何处。如果您将其存储在请求属性中(而不是存储在其他任何地方),则在处理请求后,它将有资格进行垃圾收集
如果将其存储在会话属性中,则它将存储在服务器内存中(和/或文件系统或数据库,具体取决于容器配置),直到会话超时或无效,或者直到您将其删除。HTTP是一种无状态协议。用户没有与服务器的连接
之间的Java代码不是Java标记。它是scriptlet,不应在JSP中使用。如果您需要做一些EL或JSP标记无法轻松完成的事情,那么
- 自己编写一个自定义JSP标记,将Java代码放入该JSP标记中,然后从JSP调用该标记,或者
- 或者编写一个自定义EL函数,并从JSP调用该函数
- 或者在分派到JSP之前在控制器(servlet、MVC框架操作)中准备工作,以便JSP可以轻松地生成标记
HttpServletRequest.setAttribute() --> HttpServletRequest.getAttribute()
HttpSession.setAttribute() --> HttpSession.getAttribute()
ServletContext.setAttribute() --> ServletContext.getAttribute()
我想你应该用像
<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>
//假设videoType是一个对象
如果任务太复杂,无法使用EL/JSTL完成,那么不应该在JSP中完成。在Servlet或自定义标记类中执行此操作。