0

这是我们教授的练习。我有点卡住了。首先,他希望我们将公司名称和价格存储在我们将创建的 JavaBean 中——每个实例一个价格和公司。这意味着我们需要三个 bean 实例。

请看,他希望我们使用上述方法对三个公司和价格进行硬编码。

然后,他希望我们将 JavaBeans 添加到会话中的 ArrayList 并转发到 JSP 以进行显示。

这就是我现在的状态,

    <jsp:useBean id="company1" class="beans.Invoice" scope="session"></jsp:useBean>
    <jsp:useBean id="company2" class="beans.Invoice" scope="session"></jsp:useBean>
    <jsp:useBean id="company3" class="beans.Invoice" scope="session"></jsp:useBean>

    <jsp:setProperty property="companyName" name="company1" value="Telco" />
    <jsp:setProperty property="price" name="company1" value="23" />

    <jsp:setProperty property="companyName" name="company2" value="Telcos" />
    <jsp:setProperty property="price" name="company2" value="25" />

    <jsp:setProperty property="companyName" name="company3" value="Telcoi" />
    <jsp:setProperty property="price" name="company3" value="27" />

在同一个jsp上,我正在这样做,

<%
        ArrayList<Object> disp = new ArrayList();
        disp.add(company1);
        disp.add(company2);
        disp.add(company3);

        HttpSession sess = request.getSession();
        session.setAttribute("disp", disp);

%>

然后按照他的要求在下一个 JSP 上,我正在这样做,

   <%
        ArrayList<String> list = (ArrayList<String>) request.getSession()
                .getAttribute("disp");

        for (String r : list) {
            out.println(r);
        }
    %>

这是我得到的错误

java.lang.ClassCastException: beans.Invoice cannot be cast to java.lang.String

我可能在哪里做错了?

4

2 回答 2

1

您将Invoice第一个 JSP 中的实例存储在ArrayList<Object>. 但在第二个 JSP 中,您试图将字符串从该列表中删除。一个Invoice不是一个String。这是一个Invoice.

所以第二个JSP的代码应该是

List<Invoice> list = (List<Invoice>) request.getSession().getAttribute("disp");
for (Invoice r : list) {
    out.println(r);
}

请注意,您的第一个 JSP 代码也可以改进。List<Object>当您想要的实际上是a 时,为什么要使用a List<Invoice>?它的代码应该是

List<Invoice> disp = new ArrayList<Invoice>();
disp.add(company1);
disp.add(company2);
disp.add(company3);

您还应该为变量和属性使用“disp”以外的其他名称。像“发票”这样更具描述性的东西怎么样?

最后,JSP 根本不应该使用脚本,也不应该用于在会话中存储对象。第一个 JSP 只包含代码,不生成任何标记。它应该实现为 servlet,而不是 JSP。它应该将发票存储在请求属性中,而不是在会话中。会话应该只用于存储具有会话生命周期的东西(例如当前用户的姓名、偏好或类似的东西)。

第二个 JSP 应该使用 JSP EL 和 JSTL,而不是使用 scriptlet。

于 2013-03-30T07:28:28.613 回答
0

<%ArrayList<object>list=(ArrayList<object>) 请求。获取会话()。获取属性(“disp”);for (yourClassName r:list) { out . println ( r.companyName 和其他 ); } %> 你没有将你的对象类型转换为字符串...

于 2013-03-30T07:26:32.243 回答