所以我有这个类(我从中删除了一些方法来最小化你的工作):
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"); %>
但实际上它不起作用。
答案 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}