我的 servlet 正在构建特定类的 ArrayList(或 null ArrayList),然后将其设置为请求中的属性,然后转发到 JSP。在 JSP 中,我使用 scriptlet 显示该 ArrayList 的内容。
现在在 JSP 中,我想使用 useBean 技术显示该 ArrayList 的内容。可能吗?我已经知道如何使用 JSTL 技术来做到这一点。但是这个问题是关于只使用 useBean 技术,即没有 JSTL,当然也没有 scriptlet。
这是我的课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; }
}
这就是我在 Servlet 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);
}
这就是我通过 scriptlet 在 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 的对象?
谢谢