- - PR -
ArrayListでショッピングカートをつくるには
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2004-12-13 09:02
第1画面で商品リストを表示してチェックボックスで購入する商品を選択させ、
第2画面で選択された商品のみを表示し個々に数量を設定するような流れで考えているのですが、行き詰ってしまいました。 第1画面で選択された商品をArrayList型のCartに追加してサーブレットからJSPへ渡して選択された商品のみを第2画面で表示するまでは出来たのですが、第2画面で入力された数量をCartの中に入っている商品に渡す?にはどのよにすれば良いのでしょうか。 1.ArrayListの該当品番の入っている行を取り出す。 2.数量を設定する。 3.ArrayListへ戻す。 の手順で考えているのですが3の戻すがどうやってよいのかわかりません。 ご助言お願いいたします。 商品ごとの内容、ここに商品品番と数量を設定します。 public class OrderItem { String GOODCD; String GOODNM; int GOODPRI; int GOODQNT; public OrderItem() { } public void setGOODCD(String s){ GOODCD = s; } public String getGOODCD(){ return GOODCD; } public void setGOODNM(String s){ GOODNM = s; } public String getGOODNM(){ return GOODNM; } public void setGOODPRI(int i){ GOODPRI = i; } public int getGOODPRI(){ return GOODPRI; } public void setGOODQNT(int i){ GOODQNT = i; } public int getGOODQNT(){ return GOODQNT; } } こちらがカートです。 import java.util.*; public class CartBeans { private ArrayList OrderList; public CartBeans() { OrderList = new ArrayList(); } // 参照 public OrderItem getOrderItem(int i){ return (OrderItem)OrderList.get(i); } // 追加 public void addOrderItem(OrderItem order){ OrderList.add(order); } // 削除 public void removeOrderItem(int i){ OrderList.remove(i); } // 数量 public int getSize(){ return OrderList.size(); } } | ||||||||
|
投稿日時: 2004-12-13 10:20
「第2画面で入力された数量をCartの中に入っている商品に渡す?」ってどういうことでしょう?
何がわからないのか理解できませんでした。 HttpSession とかの概念は理解されていますか? | ||||||||
|
投稿日時: 2004-12-13 10:21
ArrayListからOrderItemを取得して、数を設定した時点で
ArrayListに戻す必要はないかと思います。 取り出してるのはOrderItemの参照なので。 | ||||||||
|
投稿日時: 2004-12-13 10:50
内容が伝わりにくいなかレスありがとう御座います。
私の考え方が悪いのかもしれませんが、OrderItemを注文の1明細としたいのです。 ですので、先に商品番号をいれ、後から(ここが変なのですかね)数量を設定して明細の出来上がりと...
戻したい理由として第3画面で購入内容の確認を行うのみ表示するためです。 確認画面でOKとなってDBへ書き込みをする、といった流れです。 そんなやり方ではダメというのであれば、別を考えたいと思います。 | ||||||||
|
投稿日時: 2004-12-13 11:50
ぽちさんの仰っている「取り出してるのはOrderItemの参照なので。」という意味はわかりますか?
特に気にしなくても第三画面で情報は取り出せると思いますよ。 | ||||||||
|
投稿日時: 2004-12-13 16:30
試しにローカルでやってみるといいですよ。
こんな感じで取り出しした後わざわざ戻す必要はないです。 ちゃんとリストの中のOrderItemに変更が反映されてます。 [ メッセージ編集済み 編集者: (株)ぽち 編集日時 2004-12-13 16:32 ] | ||||||||
|
投稿日時: 2004-12-13 18:38
「戻す」という事は、どの場所に戻すのかを特定する必要があると思いますが、 そのような場合はListよりMapのほうが扱いやすいと思います。 商品番号をキーにしてOrderItemのインスタンスを保持してはどうでしょうか? あと、「戻す」必要はないですが、インスタンスの状態を更新したことを明示する ために再セットすることは価値があるのかなぁと思います。 | ||||||||
|
投稿日時: 2004-12-13 19:05
>あと、「戻す」必要はないですが、インスタンスの状態を更新したことを明示する
>ために再セットすることは価値があるのかなぁと思います。 たしかにそうですね。コンテナによってはレプリケートコストを最適化するためにオブジェクトに変更があったら明示的に setAttribute() してやる必要ある場合があります。 ・クラスタのフェイルオーバとレプリケーション > setAttribute を使用してセッション ステートを変更する http://edocs.beasys.co.jp/e-docs/wls/docs81/cluster/failover.html#1022133 List に set してやる必要はあまりないと思いますが。 |