【问题标题】:How to add JavaBeans to an ArrayList in the session?如何在会话中将 JavaBeans 添加到 ArrayList?
【发布时间】:2013-03-20 21:13:24
【问题描述】:

这是我们教授的练习。我有点卡住了。首先,他希望我们将公司名称和价格存储在我们将创建的 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

我可能做错了什么?

【问题讨论】:

    标签: jsp arraylist javabeans


    【解决方案1】:

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

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

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

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

    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。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-03-30
        • 2012-09-21
        • 1970-01-01
        • 2020-11-08
        • 2017-09-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多