アットマーク・アイティ @IT@IT情報マネジメント@IT自分戦略研究所QA@ITイベントカレンダー  
 
 @IT > MyEclipse ビジュアルJSPデザイナーで商品ページを作ろう
 
@IT Special

 

PR

MyEclipse ビジュアルJSPデザイナーで
商品ページを作ろう


 〜 連載 「開発マネージャーのMyEclipse指南塾」 第3回 〜

前回までで、Amazon Webサービスのクライアントができ、商品データを取得できるようになりました。今回は、そのデータを使用して、JSPエディタの使い方を説明しつつ、実際のWebページを作っていきます。
前回(第2回)については日本語MyEclipseポータルサイトで
第2回「Amazonから商品情報を取得するプログラムを作ろう」
の主な内容

・Amazon Webサービスとは
・Amazon Webサービスを利用するための準備
・Webサービスクライアントのテスト実行
・JSPでのテスト表示



  商品情報取得のための
ユーティリティメソッドを作る
今回の主な内容
商品情報取得のための
ユーティリティメソッドを作る

商品ページをデザインする
商品ページのページヘッダを作る

 AmazonのWebサービスは非常に詳細な商品データを取得できるようになっているため、オブジェクト構造がかなり複雑です。前回のテストコードを見ても分かるように、商品名を取得するまでに何重にもオブジェクトをたどって行かなければなりません。

 しかし、ここでは使うデータ項目も限られていますし、商品の検索の仕方も限られていますので、いちいち複雑なコードを書くのは得策ではありません。そこで、商品情報を取得する部分をユーティリティメソッドにすることで、コードがシンプルになるようにします。

 では、ユーティリティメソッドを実装していきましょう。以下のコードをAWSECommerceServiceClient.javaの、最後の「}」の手前に挿入します。

    public static String accessKeyId = "0CW05RD6N7TMG8XQC882";

    public static java.util.List<HashMap> findByBrowseNode(
        String browseNode) {

        AWSECommerceServiceClient client
            = new AWSECommerceServiceClient();
        AWSECommerceServicePortType service = client
            .getAWSECommerceServicePort();

        ItemSearch itemSearch = new ItemSearch();
        itemSearch.setAWSAccessKeyId(accessKeyId);
        ItemSearchRequest itemSearchRequest = new ItemSearchRequest();
        itemSearchRequest.setSearchIndex("HealthPersonalCare");
        itemSearchRequest.setMerchantId("A1GZVRP0NRRC2W");
        itemSearchRequest.setBrowseNode(browseNode);
        java.util.List<String> responseGroups = itemSearchRequest
            .getResponseGroup();
        responseGroups.add("Medium");
        java.util.List<ItemSearchRequest> requests
            = itemSearch.getRequest();
        requests.add(itemSearchRequest);
        ItemSearchResponse itemSearchResponse
            = service.itemSearch(itemSearch);
        java.util.List<Items> itemsList
            = itemSearchResponse.getItems();

        java.util.List<HashMap> shouhinList
            = new LinkedList<HashMap>();
        for (Items items : itemsList) {
            java.util.List<Item> itemList = items.getItem();
            for (Item item : itemList) {
                HashMap shouhin = new HashMap();
                shouhin.put("asin", item.getASIN());
                if (item.getSmallImage() != null) {
                    shouhin.put("image",
                        item.getSmallImage().getURL());
                }
                shouhin.put("price", item.getOfferSummary()
                    .getLowestNewPrice().getFormattedPrice());
                ItemAttributes itemAttributes
                    = item.getItemAttributes();
                shouhin.put("shouhinmei",
                    itemAttributes.getTitle());
                shouhinList.add(shouhin);
            }
        }
        return shouhinList;
    }

 「accessKeyId =XXX」のXXXは、自分で取得したIDに変更してください。このメソッドは、browseNode、つまり「フルーツ」「野菜」といった商品カテゴリのIDを基に、Webサービスを呼び出して商品データを取得します。そして、1商品のデータを1個のHashMapに格納してLinkedListに追加して返します。

  商品ページをデザインする

 次に、Amazon Webサービスから取得した商品情報を表示するページを作成します。MyEclipseには、ソースコードとデザイン画面の双方を確認しながら作業できる「MyEclipseビジュアルJSPデザイナー」が用意されているので、JSPの作成が非常に効率的です。

WYSIWYGでページを作れる
  「MyEclipse ビジュアルJSPデザイナー」

 商品ページを作成する前に、第2回で作成したtest.jspを使って、「MyEclipse ビジュアルJSPデザイナー」を紹介しましょう。[パッケージ・エクスプローラ]からtest.jspを開いてください。

画面1 「MyEclipse ビジュアルJSPデザイナー」
画面1 「MyEclipse ビジュアルJSPデザイナー」(画像をクリックすると拡大します)

 「MyEclipse ビジュアルJSPデザイナー」は、WYSIWYG(What You See Is What You Get、見たままに手入れできる)エディタです。ソースに適当な文字列を入力してみてください。リアルタイムに上部の[デザイン]ビューに反映されるのが分かります。また、[デザイン]ビューを直接編集することもでき、行った編集はリアルタイムに下部のソースに反映されます。

 WYSIWYGエディタは、デザインが入ってソースが複雑になってくると、特に重宝します。画面上で変更したい場所がソース上でどこなのか見つけるのに苦労することがよくありますが、WYSIWYGエディタなら変えたいところをクリックすれば、変更個所が特定できます。

 また、タグの対応を間違えてデザインが崩れるということも起こりにくいし、起こっても原因を調べやすいでしょう。

 左下に[スニペット]があります。アクティブになっていなかったらクリックしてください。ここには、さまざまなソースのパーツが置かれていて、ワンタッチでソースを追加することができます。「JSP」「CSS」などのカテゴリに分かれていて、JSFやStrutsでよく使うコードもあります。

 ユニークなのは、「フォーム・リスト」のところに「年リスト」「月リスト」などが用意されているところです。「年リスト」をソースのところにドラッグ&ドロップしてください。<select>タグが追加されます。[デザイン]ビューのところにドラッグ&ドロップすることもできます。

 [デザイン]ビューで、作成した「年リスト」をクリックしてみてください。右下の[プロパティー]のところに「名前」や「リスト値」が表示されます。ここで、リストの項目の追加や削除、変更ができます。

 また[プロパティー]の中には、[基本][拡張]というタブがあり、[拡張]をクリックすると、<select>タグのほかの属性項目が表示されます。タグの属性を忘れてしまったときでも、すぐに調べることができる便利な機能です。

 [スニペット]から「HTML」の中の「単一表」を[デザイン]ビューにドラッグ&ドロップしてください。できたテーブルをクリックしてフォーカスを当てます。枠線や三角が表示されます。小さい三角をクリックすると、上下左右に行・列を増やしていくことができます。

 三角の間の「×」印をクリックすると、行や列が消えます。右下のプロパティーに「行数」「列数」を指定すると、colspanやrowspanが設定できます。

画面2 テーブル
画面2 テーブル

 右上の[アウトライン]は、HTMLタグの構造がツリー状に表示されます。タグの構造で迷子になってしまったときに便利です。

 中央のソースの下に[デザイン][プレビュー]というタブがあります。[プレビュー]をクリックすると、実際のWebブラウザ表示のプレビューができます。Internet ExplorerとMozillaでのプレビュー画面が上下に同時に表示されるので、両方のプレビューが一度にできて非常に便利です。

商品ページの作成

 それでは、商品ページを実際に作ってみましょう。デフォルトで用意されているindex.jspを商品ページにします。[パッケージ・エクスプローラ]からindex.jspを開いてください。

 1行目のpageEncodingを以下のように変更します。

<%@ page language="java" import="java.util.*"
    pageEncoding="Windows-31J"%>

 2行目に以下のように入力します。

<%@ page import="java.util.*,com.oisix.myeclipse.*" %>

 パッケージ名の入力が面倒な場合は、[CTRL]+[スペース]を押すと、コードアシストの機能が、パッケージ名を自動的に補完してくれます。

 次に、JSTL(JSP Standard TagLibrary)を使えるようにするために、3行目に以下を追加します。Java EEプロジェクトにした場合、MyEclipseではJSTLのライブラリがすでに組み込まれた状態になっているのでダウンロードして組み込む作業は必要ありません。

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>

 8行目のDOCTYPEの上で、次のように入力します。

<%
  String browseNode = request.getP
%>

 getPの後ろで[CTRL]+[スペース]を押してコードアシストを有効にしてみてください。スクリプトレットの中でもコードの候補が表示されます。MyEclipseのコードアシストの機能は、ほかのJava IDEと比較しても非常に優れています。

 「getParameter()」を選択し、最終的に以下のように記述してください。

<%
  String browseNode = request.getParameter("browsenode");
  List<HashMap> shouhinList =       AWSECommerceServiceClient.findByBrowseNode(browseNode);
  request.setAttribute("shouhinList", shouhinList);
%>

 <body>タグの下の、「<br>This is my JSP page. <br>」の行を削除します。上半分のデザインを見ると、「This is my JSP page」が消えていると思います。削除したら、<body>タグの下に以下のコードを追加してください。

<c:forEach var="shouhin" items="${shouhinList}">
  <div style="border-bottom-style: dotted; border-width: 2px; border
-color: gray; padding-top: 5px;">
    <c:if test="${!(empty shouhin['image'])}">
      <img src="<c:out value="${shouhin['image']}" />" style="float:
left;" />
    </c:if>
    <c:out value="${shouhin['shouhinmei']}" />
    <c:out value="${shouhin['price']}" />
    <br/>
    <form action="cart.jsp" method="post">
      <input type="hidden" name="asin"
        value="<c:out value="${shouhin['asin']}" />" />
      <input type="submit" value="お買い物かごに入れる" />
    </form>
    <br style="clear: left;" />
  </div>
</c:forEach>

 上のデザイン部分を見てください。画像が出るところと、お買い物かごに入れるボタンと、点線が出ていると思います。これが商品1個分で、ループさせて複数商品表示させることになります。JSPソース下のプレビューも見てみるとよいでしょう。

 ここまでの作業が終了したら、早速表示させてみましょう。

続きは日本語MyEclipseポータルサイトでもご覧いただけます
第3回の残りの主な内容

  JSPのデバッグをしてみる
・商品ページのページヘッダを作る

第4回「ショッピングカートを作ろう」の主な内容

・組み込みデータベースDerbyとは
・購入商品を格納するデータベースの作成
・カート商品情報検索用のユーティリティメソッドの追加
・ショッピングカートの実装


 [MyEclipse Webブラウザ]で次のURLにアクセスします。

http://localhost:8080/myeclipse-sample/index.jsp?browsenode=366589011

画面3 スクリーンショット
画面3 スクリーンショット

 プログラムの解説をしましょう。browsenodeの値をリクエストのパラメータから取得します。先ほど作成したユーティリティメソッドで商品データを検索して取得します。requestにセットして、JSTLのEL式で使えるようにしています。

 後は<body>タグの下でループして表示します。1商品を1つの<div>タグのブロックにしています。スタイルシートで商品の下に下線を付けています。画像に「float:left」を指定して、画像の右に商品名やボタンが出るようにしています。

 「asin」というのが、いわゆる商品コードです。「Amazon Standard Identification Number」の略で、名前から分かるとおりAmazon独自のコードになります。

 「お買い物かごに入れる」ボタンはまだ機能しません。後日ショッピングカートを実装した際に機能するようになります。

JSPのデバッグをしてみる

 MyEclipseでは、JSPのデバッグもできます。index.jspのソースの、「</c:if>」の左の枠のところをクリックすると、ブレークポイントが設定できます。

画面4 ブレークポイント
画面4 ブレークポイント

 サーバをデバッグ・モードで起動します。中央下のペインで、[サーバー]タブをクリックします。Tomcatが起動していたら停止します。Tomcatの上で右クリックして[停止]を選択します。次に、同じくTomcatの上で右クリックして[デバッグモードで開始]で開始します。

 Webブラウザで、index.jspを開きます。

http://localhost:8080/myeclipse-sample/index.jsp?browsenode=366589011

 ブレークポイントで実行が停止し、[デバッグ]パースペクティブに切り替わります。ここで、ステップ実行をすることもできます。

  商品ページのページヘッダを作る

 最後に、ロゴやナビゲーションなど、各ページの共通部分を作ってページを仕上げましょう。[WebRoot]で右クリックして、[新規]→[その他]をクリックします。

 ウィンドウが開くので、[Web]の中にある、[CSS]を選択します。[次へ]をクリックします。ファイル名のところに「styles.css」と入力して、[終了]をクリックします。styles.cssが新規に作成されて、開いた状態になります。

 以下のように入力して保存します。

.menu {
    background-color: #54FF9F;
    padding: 5px;
}

 拡張テンプレートで「header.jsp」というファイルを作成します。以下のように入力します。

<%@ page language="java" import="java.util.*" pageEncoding="windows-31j"%>
<img src="oisixlogo.gif" />
<div class="menu">
  <a href="index.jsp?browsenode=366589011">フルーツ</a>
  <a href="index.jsp?browsenode=366591011">葉物野菜</a>
  <a href="index.jsp?browsenode=366602011">牛乳・バター</a>
  <a href="keywordsearch.jsp">キーワード検索</a>
</div>

 index.jspを開きます。<head>タグ下の方で、コメントアウトされている<link>タグのコメントを外します。

<link rel="stylesheet" type="text/css" href="styles.css">

 <body>タグの下に、includeを追加します。

<jsp:include flush="true" page="header.jsp"></jsp:include>

 oisixlogo.gifをローカルに保存して、[WebRoot]にドラッグ&ドロップして追加します。

画面5 オイシックスのロゴ
画面5 オイシックスのロゴ

 さて、Webブラウザで以下のURLにアクセスしてみましょう。

http://localhost:8080/myeclipse-sample/

 以下のように表示されれば、成功です。

画面6 商品ページのヘッダ
画面6 商品ページのヘッダ

 「葉物野菜」「牛乳・バター」をクリックすると、いままでと違う商品が表示されるはずです。これと同じ要領で「browsenode」を変えていけば、もっと多くのカテゴリを表示させることができます。

 「browsenode」の調べ方は、Amazon独自なので、Webサービスからリストを取得するのが正しいやり方です。しかし、経験的にはAmazonページのURLから読み取ることができます。

 Amazonの中にあるオイシックスのページにアクセスします。

http://www.amazon.co.jp/b/249-1227448-5019510?ie=UTF8&me=A1GZVRP0NRRC2W

 左の方にあるカテゴリ名をクリックします。例えばフルーツをクリックすると、URLは以下のようになっています。

http://www.amazon.co.jp/b/ref=sc_bb_br_45694051_1?ie=UTF8&node=366589011&no=4
5694051&me=A1GZVRP0NRRC2W

 「node=」の後ろが「browsenode」になっているようです。お好みでbrowsenodeをもっと増やしてみるとよいでしょう。

 次回は、データベース関連機能の紹介と、ショッピングカートの実装を行います。

続き(第4回)は日本語MyEclipseポータルサイトで
第4回「ショッピングカートを作ろう」の主な内容

・組み込みデータベースDerbyとは
・購入商品を格納するデータベースの作成
・カート商品情報検索用のユーティリティメソッドの追加
・ショッピングカートの実装



※本記事は、日立製作所の『日本語MyEclipseポータルサイト』に掲載された記事を許諾を得て、再構成したものです。
提供:株式会社 日立製作所
企画:アイティメディア 営業局
制作:@IT編集部
掲載内容有効期限:2008年3月31日
 
関連リンク
日本語MyEclipseポータルサイト
日本語MyEclipse 無料体験版ダウンロード(会員登録不要)
Cosminexus(コズミネクサス)
日立製作所

「開発マネージャーのMyEclipse指南塾」
連載予定
第1回: EclipseでAmazon Webサービスを使うショッピングサイトを構築するには?
第2回: Amazonから商品情報を取得するプログラムを作ろう(
第3回: MyEclipse ビジュアルJSPデザイナーで商品ページを作ろう
第4回: ショッピングカートを作ろう(
第5回: Ajaxでリアルタイム検索結果表示のインクリメンタルサーチを作るには?
第6回: MyEclipse JavaScriptエディタでJavaScriptを開発しよう(
第7回: バグを見つけろ! (1)MyEclipse AJAX WebブラウザーでAjaxをデバッグ
第8回: バグを見つけろ! (2)MyEclipseでJavaScriptのデバッグ(
第9回: JSFで購入フォームを作ろう―画面遷移をビジュアルに開発
第10回: JSFで購入フォームを作ろう―JSFをビジュアルに開発(
第11回: JSFで購入フォームを作ろう―完成
第12回: MyEclipse Reportで売上グラフを作ろう(

の回は日本語MyEclipseポータルサイトにて公開

@IT関連記事
連載「MyEclipseでAjax+Javaをやさしく開発」(@IT Java Solution)
便利なプラグインの集大成MyEclipse(@IT Java Solution)
Javaの最新動向を見極める デブサミ2007「MyEclipseならAjaxもええじゃないか♪」(@IT Java Solution)
日立、SOA基盤「Cosminexus」の新版発表〜システム開発期間を短縮〜(@IT NewsInsight)
SOA対応した日立「Cosminexus」、開発効率3倍の根拠は(@IT NewsInsight)
【プロダクトレビュー】ミッションクリティカル機能を強化Cosminexus AS Version6(@IT Java Solution)


 
@ITトップ@IT Special インデックス会議室利用規約プライバシーポリシーサイトマップ