1

私のサーブレットは、特定のクラス (または null ArrayList) の ArrayList を構築し、それをリクエストの属性として設定してから、JSP に転送しています。JSP では、スクリプトレットを使用してその ArrayList の内容を表示しています。

JSP では、useBean テクノロジを使用して、その ArrayList の内容を表示したいと考えています。出来ますか?JSTL テクノロジーを使用してそれを行う方法はすでに知っています。しかし、この質問は useBean テクノロジーのみを使用することに関するものです。つまり、JSTL ももちろんスクリプトレットも使用しません。

これは私のクラスTestClassです:

public class TestClass implements Serializable {
   private int id;
   private String description;
   public int getId() { return this.id; }
   public void setId(int id) { this.id = id; }
   public String getDescription() { return this.description; }
   public void setDescription(String description) { this.description = description; }
}

これは、サーブレットTestClassServletに ArrayList を設定する方法です。

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
   List<TestClass> testClassList = null;
   TestClass testClass = null;
   String criteria = request.getParameter("criteria");

   if (criteria == null || criteria.trim().isEmpty()) {
      request.setAttribute("result", testClassList);

   } else if (criteria.trim().equalsIgnoreCase("ALL")) {
      testClassList = new ArrayList<TestClass>();
      testClass = new TestClass();
      testClass.setId(1);
      testClass.setDescription("Normal");
      testClassList.add(testClass);
      testClass = new TestClass();
      testClass.setId(2);
      testClass.setDescription("Priority");
      testClassList.add(testClass);
      request.setAttribute("result", testClassList);

   } else {
      request.setAttribute("result", testClassList);

   }

   request.getRequestDispatcher("test.jsp").forward(request, response);
}

これは、スクリプトレットを使用して JSP で表示する方法です。

<%
List<TestClass> testClassList = (List<TestClass>) request.getAttribute("result");
if (testClassList == null) {
%>
    <select id="select_testClassList" disabled="disabled">
    </select>
<%  
} else {
%>
    <select id="select_testClassList">
        <option value=""></option>
<%  
    for (TestClass testClass : testClassList) {
%>
        <option value="<%=testClass.getId()%>"><%=testClass.getDescription()%></option>
<%      
    }
%>
    </select>
<%
}
%>

最初に、クラスを java.util.List として useBean を試しました

<jsp:useBean id="testClassList" class="java.util.List" scope="request"></jsp:useBean>

しかし、このエラーメッセージが表示されたので、コンパイルさえしませんでした:

タイプ List をインスタンス化できません

useBean テクノロジーの仕様としては十分です。ジェネリックを使用して java.util.ArrayList に変更します。

<jsp:useBean id="testClassList" class="java.util.ArrayList<TestClass>" scope="request"></jsp:useBean>

しかし、その後、次のエラー メッセージが表示されました。

org.apache.jasper.JasperException: /test2.jsp(14,0) useBean クラス属性 java.util.ArrayList の値が無効です。

次に、ジェネリックなしで java.util.ArrayList に変更します。

<jsp:useBean id="testClassList" class="java.util.ArrayList" scope="request"></jsp:useBean>

その後、エラーは発生しません。

useBean テクノロジーを使用して ArrayList をループする方法がわかりません。私は使用する必要があると思いますjsp:getPropertyが、それは TestClass のオブジェクトで機能し、私の懸念は ArrayList から TestClass のオブジェクトを取得する方法ですか?

ありがとう

4

0 に答える 0