0

这是我的 Servlet,其中将文本框值添加到 ArrayList。我也在使用 JavaBeans。

protected void doPost(HttpServletRequest request,
            HttpServletResponse response) throws ServletException, IOException {

        String companyName = request.getParameter("txtCompany");
        double price = Double.parseDouble(request.getParameter("txtPrice"));
        HttpSession session = request.getSession();
        // Invoice r = new Invoice();

        ArrayList<Invoice> list = (ArrayList<Invoice>) session
                .getAttribute("EInvoice.list");

        if (list == null) {
            list = new ArrayList<Invoice>();
        }
        list.add(new Invoice(companyName, price));

        session.setAttribute("EInvoice.list", list);

        String url = "/Show.jsp";

        RequestDispatcher rd = getServletContext().getRequestDispatcher(url);
        rd.forward(request, response);

    }

这是 Show.jsp

   <%@ page language="java" contentType="text/html; charset=ISO-8859-1"
        pageEncoding="ISO-8859-1"%>
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>

    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">


    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
    <title>Show</title>
    </head>
    <body>
        <c:forEach var="list" items="${EInvoice.list}">
            <h1>${list.companyName} ${list.price}</h1>
        </c:forEach>
    </body>
    </html>

我希望它显示输入的文本框值,但我得到的只是一个空白页。知道为什么吗?在我学习 JSTL 时,请原谅任何愚蠢的代码错误。

4

1 回答 1

4

表达式语言 (EL)中,句.点是一个特殊的运算符,用于将属性与 bean 分开。它不应在属性名称中使用,否则您必须使用大括号表示法明确指定范围映射。您的具体问题是因为它正在搜索具有确切名称“EInvoice”的属性,然后它会尝试调用该getList()方法。但是,EL 范围中不存在这样的属性,因此没有什么可以迭代的。

如前所述,您可以改用范围映射上的大括号表示法来引用它:

<c:forEach var="list" items="${sessionScope['EInvoice.list']}">

但是,我建议只重命名属性名称。例如:

session.setAttribute("invoices", invoices);

等价地:

<c:forEach var="invoice" items="${invoices}">
    <h1>${invoice.companyName} ${invoice.price}</h1>
</c:forEach>

请注意,我还立即使变量名称更具自我记录性。在查看变量名称“列表”时,人们不知道它究竟包含哪些项目。此外,在循环中将列表中的每个迭代项命名为“列表”也没有任何意义。

于 2013-03-31T08:29:46.347 回答