如何从contextListener获取属性?

时间:2014-04-01 11:18:23

标签: jsp servlets web

所以我有这个类(我从中删除了一些方法来最小化你的工作):

public class ContextListener implements ServletContextListener {
    ArrayList<Product> products = new ArrayList();
    ServletContext context ;

    @Override
    public void contextInitialized(ServletContextEvent sce) {

        try {        
            this.getProductsFromDB(); // this method puts the products in the arraylist
        } catch (SQLException ex) {
            Logger.getLogger(ContextListener.class.getName()).log(Level.SEVERE, null, ex);
        }

        context = sce.getServletContext();
        context.setAttribute("products", products);
    }

我希望在这样的JSP页面中获取ArrayList

<%! ArrayList<Product> products = (ArrayList<Product>)getServletContext().getAttribute("products"); %>

但实际上它不起作用。

2 个答案:

答案 0 :(得分:1)

像这样使用 JSTL

${applicationScope['products']}

或只是属性名称

${products}

注意:建议使用 NOT

您必须使用JSTL中的c:forEach标记迭代列表

<c:forEach items="${products}" var="product">
  <li><c:out value="${product.field}"/></li>
 </c:forEach>

field表示Product Java bean

中的属性

答案 1 :(得分:1)

您需要将其分配给完全限定名称。

<%
   java.util.ArrayList<Product> products = (java.util.ArrayList<you.package.for.Product>) getServletContext().getAttribute("products");
   pageContext.setAttribute("products", products);
%>

接下来,您应该可以通过其属性名称来调用它:

${products}