0

これは私たちの教授からの演習です。私はちょっと立ち往生しています。最初に、インスタンスごとに 1 つの価格と会社を作成する JavaBean に、会社名と価格を格納するよう求めています。これは、3 つの Bean インスタンスが必要であることを意味します。

ご覧ください、彼は、上記の方法を使用して 3 つの会社と価格をハードコーディングすることを望んでいます。

次に、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>。しかし、2 番目の JSP では、このリストから文字列を取得しようとしています。はInvoiceではありませんString。それはInvoiceです。

したがって、2 番目の 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 にはコードのみが含まれ、マークアップは生成されません。JSP としてではなく、サーブレットとして実装する必要があります。また、請求書はセッションではなくリクエスト属性に保存する必要があります。セッションは、セッションの有効期間があるもの (現在のユーザーの名前、設定など) を保存するためにのみ使用する必要があります。

2 番目の JSP は、スクリプトレットを使用するのではなく、JSP EL および JSTL を使用する必要があります。

于 2013-03-30T07:28:28.613 に答える
0

<% ArrayList < オブジェクト > リスト = (ArrayList < オブジェクト >) リクエスト . getSession () . getAttribute ( "disp" ); for ( yourClassName r: list ) { out . println ( r.companyName など ); } %> オブジェクト型を文字列にキャストしないでください...

于 2013-03-30T07:26:32.243 に答える