3

在一个jsp文件中我有这个声明:

<jsp:useBean scope="request" id="products" class="java.util.ArrayList<sgt.supermarket.entity.Product>"/>

此声明适用于 GlassFish 2.1,但是,当我切换到 Tomcat 6.0 时,会引发异常:

useBean 类属性 java.util.ArrayList 的值无效。

Tomcat 是否缺少任何使其行为与 Glass Fish 2.1 不同的库?

4

2 回答 2

5

EL 不知道参数化类型,因此没有必要这样做。在 JSP/EL 中,绝对没有编译时检查。EL更多地基于反射。然而,我有点惊讶它在 Glassfish 中“工作”,因为它没有在 JSP/EL 规范中指定。

除此之外,jsp:useBean在一个体面的 MVC 应用程序中,它是相当多余的,其中 aServlet用于控制和预处理请求。

List<Product> procucts = productDAO.list();
request.setAttribute("products", products);
request.getRequestDispatcher("products.jsp").forward(request, response);

现在products只能通过 EL 在 EL 中访问${products}。不需要一个jsp:useBean.

于 2009-12-15T16:17:37.307 回答
0

如果您正在处理遗留代码并且只是想摆脱所有这些原始类型的 JSP 警告,那么您可能希望将您的行替换为以下代码:

<% request.setAttribute("products", 
       new java.util.ArrayList<sgt.supermarket.entity.Product>()); %>

但是 BalusC 仍然是正确的:当您使用经典的 MVC 模式时,最好在控制器中而不是在视图中创建此产品列表。如果您使用的是视图优先模式,那么我建议您编写自己的 JSP 标记,它可以用干净的 Java 代码创建并填充此产品列表。

于 2013-02-12T12:25:21.987 回答