1

我的 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 的对象?

谢谢

4

0 回答 0