授業第11回 jQuery Mobileショッピングサイト
1、ショッピングサイトを作る準備
前期mobile webの時間に作成した、jQueryと、JSPを連携させたアプリケーションを、
jQuery mobileにしたのが、これです。
使用しているテーブルは同じで、
「ログイン」>「商品の選択」>「確認」>「注文」
の流れも同じです。
もう一度、/2011/jqueryLect3.html を見直し、
このページのようなショッピングアプリケーションをjQuery mobileで作ってみましょう。
サンプル(JSPの部分だけを単純化して、シンプルにしたもの。全然見当もつかない人は、以下のサンプルをまず作り、
それから、jQuery mobileのアプリケーションとして、作り直す。
1、商品一覧表示(cart.jsp)
<%@ page contentType="text/html; charset=UTF-8" trimDirectiveWhitespaces="true" %> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> <%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %> <%@ taglib uri="http://java.sun.com/jsp/jstl/sql" prefix="sql" %> <%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %> <fmt:requestEncoding value="UTF-8"/> <fmt:setLocale value="ja_JP" /> <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>Shop JSPのみの版</title> <meta charset="utf-8" /> </head> <body> <sql:setDataSource dataSource="jdbc/hanrin"/> <sql:query sql="select id from jq_items;" var="rc" /> <!-- 商品一覧を表示.購入情報を、次のJSPに送信するフォーム --> <form action="confirm.jsp" method="post"> <fieldset> <legend>注文フォーム</legend> <table border="1"> <tr> <td>画像</td> <td>商品ID</td> <td>商品名</td> <td>価格</td> <td>在庫数</td> <td>注文個数</td> </tr> <c:forEach items="${rs.rows}" var="i"> <tr> <td><img src="/hanrin/jQueryMobile/img/${i.img}" alt="img" width="100" height="100"/></td> <td>${i.id}</td> <td>${i.name}</td> <td>${i.price}</td> <td>${i.stock}</td> <td><input type="text" name="quantity" size="2" value="0" /> <!-- 隠しタグ --> <input type="hidden" name="iid" value="${i.id}" /> <input type="hidden" name="name" value="${i.name}" /> <input type="hidden" name="price" value="${i.price}" /> <input type="hidden" name="stock" value="${i.stock}" /></td> </tr> </c:forEach> </table> <input type="submit" value="カートに追加する" /> </fieldset> </form> </body> </html>
2、送信内容の確認(confirm.jsp)
<%@ page contentType="text/html; charset=UTF-8" trimDirectiveWhitespaces="true" %> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> <%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %> <fmt:requestEncoding value="UTF-8"/> <fmt:setLocale value="ja_JP" /> <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>確認フォーム</title> <meta charset="utf-8" /> </head> <body> <!-- ユーザーIDを仮にセット(本当はパラメーターでセット) --> <c:set var="userid" value="c01" /> <!-- 商品の配列を取得 --> <c:set var="itemid" value="${paramValues.iid}" /> <c:set var="itemname" value="${paramValues.name}" /> <c:set var="itemprice" value="${paramValues.price}" /> <c:set var="itemquantity" value="${paramValues.quantity}" /> <!-- 「注文を確定する」が押されたら、データベースに書き込む --> <form action="fix.jsp" method="post"> <fieldset> <legend>注文確認</legend> <table border="1"> <tr> <td>商品ID</td> <td>商品名</td> <td>価格</td> <td>注文個数</td> </tr> <c:forEach items="${itemid}" var="i" varStatus="x"> <fmt:parseNumber var="qt" value="${itemquantity[x.index]}" /> <fmt:parseNumber var="pr" value="${itemprice[x.index]}" /> <c:if test="${qt > 0}"> <tr> <td>${i}<input type="hidden" name="iid" value="${i}" /></td> <td>${itemname[x.index]}<input type="hidden" name="name" value="${itemname[x.index]}" /></td> <td>${itemprice[x.index]}<input type="hidden" name="price" value="${itemprice[x.index]}" /></td> <td>${itemquantity[x.index]}<input type="hidden" name="quantity" value="${itemquantity[x.index]}" /></td> </tr> </c:if> </c:forEach> <input type="hidden" name="uid" value="${userid}" /> </table> <a href="cart.jsp"><input type="button" value="戻る" /></a> <input type="submit" value="注文を確定する" /> </fieldset> </form> </body> </html>
3、データベースへの書き込み(fix.jsp)
<%@ page contentType="text/html; charset=UTF-8" trimDirectiveWhitespaces="true" %> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> <%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %> <%@ taglib uri="http://java.sun.com/jsp/jstl/sql" prefix="sql" %> <fmt:requestEncoding value="UTF-8"/> <fmt:setLocale value="ja_JP" /> <sql:setDataSource dataSource="jdbc/hanrin" /> <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>DB書き込み</title> <meta charset="utf-8" /> </head> <body> <c:set var="pm1" value="${paramValues.iid}" /> <c:set var="pm2" value="${paramValues.quantity}" /> <c:set var="pm" value="${param.uid}" /> <sql:transaction isolation="serializable"> <c:forEach items="${pm1}" var="i" varStatus="x"> <fmt:parseNumber var="qt" value="${pm2[x.index]}" /> <c:if test="${qt > 0}"> <sql:update sql="insert into jq_orders(cid,iid,quantity) values(?,?,?);"> <sql:param value="${pm}" /> <sql:param value="${i}" /> <sql:param value="${qt}" /> </sql:update> <sql:update sql="update jq_items set stock = stock - ? where id = ?"> <sql:param value="${qt}" /> <sql:param value="${i}" /> </sql:update> </c:if> </c:forEach> </sql:transaction> 注文を確定しました <a href="cart.jsp"><input type="button" value="戻る" /></a> </body> </html>
問題1
上のようなショッピングサイトアプリケーションを、
作りなさい。必ず、jQuery mobileを使う事。上のサンプルを元に、jQuery mobileでアプリケーションを作り直すのが問題なので、これをやっていない人には、点は与えません。
入力される値のチェック(空白を許可しない、在庫以上の数字は入力しない、数字以外は許可しない、など)の処理は全部作ってください。(JSP側で確認するのでも、jQueryを使って確認するのでも、どちらも可)
または、在庫数を元に、<select>タグで、在庫以上の数は選べないようにする、でもよろしい。
データベースに、おかしなデータ(例えば、数字なのに文字列が入っている、0個の注文など)が入ると、データベースの信頼性が無くなります。
問題2
売れ筋商品(売り上げ金額合計が多い商品)の横に「売れています」という文字を表示しなさい。
出来る人は、ページング、ログイン認証を作ってください。
(これはJSPとセッションを使わないと無理でしょう)
ショッピングカート専用のDBを作り、確認画面で数量を変更したり、
注文を取り消したり出来るようにしなさい。(JSP、jQueryのどちらでも可)
(後からlocalStorageを勉強しますが、これを利用するのも可)
また、「商品ごとの売り上げ金額の合計」のグラフをSVGまたはcanvasを使って、表示するページを作りなさい。
これら問題は、多くの要素を含んでいるので、自分の出来る範囲で作る事。
難しいと感じる人は、出来るところまでで良いので(商品の一覧ページしか出来ないひとは、それでもよい)がんばって作る事。
この問題を完璧に作った人には、100点あげます。
(くれぐれも、他人の作品をコピーしたりしないように。コピーしたひとは大きな減点になります。出来ないなりに自分で作る事こそが大事で、自分でアプリケーションをどのように作ったか、説明出来ないようなアプリケーションは、作ること自体が無意味です。そこを良く理解してください。)