私のサーブレットは、特定のクラス (または 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 のオブジェクトを取得する方法ですか?
ありがとう