Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在java标记中使用EL_Java_Jsp_El_Scriptlet - Fatal编程技术网

在java标记中使用EL

在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>

我有一个从servlet转发到jsp文件的属性,虽然我可以将这个对象与EL一起使用,但我想知道如何在java标记中访问它。例如,如下所示:

 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可以轻松地生成标记
可以使用与用于存储列表的setAttribute方法相对应的getAttribute方法访问列表:

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或自定义标记类中执行此操作。