0

サーブレットからjspファイルに転送した属性があり、このオブジェクトをELで使用できますが、Javaタグ内でアクセスする方法を知りたいです。例は次のようなものです。

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

したがって、ここでの結果はArrayList、サーブレットから jsp に転送されるタイプのビデオです。

ELでは実行できない、より複雑なタスクを実行するために、タグ内でArrayListこれにアクセスしたいと思います。<% %>

誰でもこれを行う方法を知っていますか?

ちなみに、ArrayList私が作成しているこれは潜在的に大きくなる可能性があります。これはどこに保管されていますか?サーバー上または一部のユーザーの一時ファイル内? サーバーメモリに保存されている場合、一定期間/ArrayListサーバーへの接続を閉じることを要求したユーザーなどのイベント後に消去されますか?

4

2 に答える 2

1

それはすべて、リストをどこに保存したかによって異なります。リクエスト属性に保存した場合(他の場所ではなく)、リクエストが処理されたときにガベージコレクションの対象になります。

セッション属性に保存した場合、セッションがタイムアウトするか無効になるまで、またはセッションを削除するまで、サーバー メモリ (および/またはコンテナーの構成に応じてファイル システムまたはデータベース) に保存されます。HTTP はステートレス プロトコルです。ユーザーはサーバーに接続していません。

間の Java コード<% %>は Java タグではありません。これはスクリプトレットであり、JSP では使用しないでください。EL や JSP タグでは簡単にできないことをする必要がある場合は、

  • カスタム JSP タグを自分で作成し、この JSP タグに Java コードを配置して、JSP からタグを呼び出す、または
  • または、カスタム EL 関数を作成し、JSP からこの関数を呼び出します
  • または、JSP にディスパッチする前にコントローラ (サーブレット、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 に答える