Javaに関する様々な情報をご紹介します。

Javaに関する様々な情報をご紹介します。
評価

0

jspページ内でページの更新なしで、計算を行う方法

ショッピングサイトの商品カートページを作成しています。
ページの更新を行わずにページ内で個数の変更を行なって計算結果を表示させたいと思っていますが、最後に追加した商品しか編集ができず困っています。
テーブルをfor文で複数作っているのですが、それが災いしてか商品の合計値が最後に作成したテーブルの値しか変更されません。
最後に追加した商品以外の商品について個数と合計を同じページ内で変更したいのですが、どうすれば良いでしょうか?
どなたか教えて下さい。
宜しくお願いいたします。
---------------------------------------
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"
    import="java.io.IOException,java.io.PrintWriter,java.sql.Connection,java.sql.DriverManager,java.sql.ResultSet,java.sql.SQLException,java.sql.Statement,java.util.ArrayList,javax.servlet.RequestDispatcher,javax.servlet.ServletException,javax.servlet.annotation.WebServlet,javax.servlet.http.HttpServlet,javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse,javax.servlet.http.HttpSession,record.KounyuMeisai"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>ショッピングカート</title>
</head>
<body>

    <%
        //セッションからArrayListを取ってくる
        ArrayList<KounyuMeisai> KounyuList = (ArrayList<KounyuMeisai>) session
                .getAttribute("KounyuList");
    %>
    <table border=2 width=800 align=center>
        <caption>【買い物かご】</caption>
        <tr>
            <th></th>
            <th>商品名</th>
            <th>商品種別</th>
            <th>商品単価(円)</th>
            <th>注文数</th>
            <th>合計(円)</th>
            <th></th>
        </tr>

        <%
            //繰り返しでArrayListの中身を取ってくる 
            int i = 0;
            int kou = 1;
            int soukei = 0;
            for (KounyuMeisai k : KounyuList) {
                if (k.getNum() != 0) {
        %>
        <script>
            function goukei() {
                document.getElementById("kekka"+<%=i %>).value=document.getElementById("tanka"+<%=i %>).value *document.getElementById("kosuu"+<%=i %>).value; 
            }
        </script>
        <tr>
            <th><%=kou%></th>
            <th><%=k.getSname()%></th>
            <th><%=k.getSkind()%></th>
            <th><input type="text" value =<%=k.getSprice()%> id=tanka<%=i %> readonly></input>
            </th>
            <th><form action="KounyuHenshuServlet" method="post">
                    <p>
                        <select name="afterNum" onchange=goukei() id=kosuu<%=i %>>
                            <option value=<%=k.getNum()%> selected><%=k.getNum()%></option>
                            <option value="1">1</option>
                            <option value="2">2</option>
                            <option value="3">3</option>
                            <option value="4">4</option>
                            <option value="5">5</option>
                            <option value="6">6</option>
                        </select>
                    </p>
            </th>
            <th><input type ="text" value=<%=k.getSprice()*k.getNum() %> id=kekka<%=i %> readonly></input></th>
            <th><input type=hidden name=AlistNum value=<%=i%> > 
            <input type="submit" name="button" value="変更"> 
            <input type="submit" name="button" value="削除">
                </form></th>
        </tr>
        <%
            soukei += k.getNum() * k.getSprice();
                    kou++;
                }
                i++;
            }
            //セッションにアレイリストを入れる。
            session.setAttribute("KounyuList", KounyuList);
        %>
        <tr>
            <th></th>
            <th></th>
            <th></th>
            <th></th>
            <th></th>
            <th>総計</th>
            <th><%=soukei%></th>
        </tr>
    </table>
    <a href="kounyuInput.jsp">買い物を続ける</a>
    <br>
</body>
</html>
 
    
                
        
        
        このページのトップへ         
        
    ニュース|Java基本|Servlet・JSP|オープンソース|FAQ|本・ソフトウェア|リンク集|掲示板     
    
Javaの道_Copyright
    

1

回答

6975

閲覧

1件の回答

評価

0

ページの更新(遷移のことだろう)なしに計算するには、JavaScriptで計算するか、もしくはさらにAjax(類似の隠しフレームを含む)でやるかになる。

質問から6ヶ月以上経過しているので、回答を書き込むことはできません。