这是我们教授的练习。我有点卡住了。首先,他希望我们将公司名称和价格存储在我们将创建的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
我可能做错了什么?
答案 0 :(得分:1)
您将Invoice
的实例存储在ArrayList<Object>
的第一个JSP中。但是在第二个JSP中,你试图让Strings脱离这个列表。 Invoice
不是String
。这是一个Invoice
。
所以第二个JSP的代码应该是
List<Invoice> list = (List<Invoice>) request.getSession().getAttribute("disp");
for (Invoice r : list) {
out.println(r);
}
请注意,您的第一个JSP代码也可以进行改进。为什么在你想要的时候使用List<Object>
实际上是List<Invoice>
?它的代码应该是
List<Invoice> disp = new ArrayList<Invoice>();
disp.add(company1);
disp.add(company2);
disp.add(company3);
您还应该为变量和属性使用“disp”之外的其他名称。像“发票”这样更具描述性的东西呢?
最后,JSP根本不应使用scriplets,不应该用于在会话中存储对象。第一个JSP只包含代码,不生成任何标记。它应该作为servlet实现,而不是作为JSP实现。它应该将发票存储在请求属性中而不是会话中。该会话应仅用于存储具有会话生命周期的内容(如当前用户的名称,首选项或类似内容)。
第二个JSP应该使用JSP EL和JSTL而不是使用scriptlet。
答案 1 :(得分:0)
&lt;%ArrayList&lt;对象&gt; list =(ArrayList&lt; object&gt;)请求。 getSession()。 getAttribute(“disp”); for(yourClassName r:list){out。 println(r.companyName等); }%&gt;你的con't将对象类型转换为字符串......