広告

■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
                      2010年05月09日

    Java総合講座 - 初心者から達人へのパスポート
                  vol.203

                                セルゲイ・ランダウ
 バックナンバー: http://www.flsi.co.jp/Java_text/
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■


-------------------------------------------------------
・現在、このメールマガジンは以下の2部構成になっています。
[1] 当初からのコース:毎週日曜の夜に発行
   これは現在、中級レベルになっています。
[2] 2009年11月開講コース:毎週水曜の夜に発行
   これは現在、初心者向けのレベルになっています。
・このメールマガジンは、画面を最大化して見てください。
小さな画面で見ていると、不適切な位置で行が切れてしまう
など、問題を起すことがあります。
・このメールマガジンに掲載されているソース・コード及び
文章は特に断らない限り、すべて筆者が著作権を所有してい
ます。また、これらのソース・コードは学習用のためだけに
提供しているものです。
-------------------------------------------------------


========================================================
◆ 01.Strutsのアプリケーション開発(プロジェクト:StrutsShop)
========================================================


さて、struts-config.xmlに指定すべきものが、まだまだ残っていますね。


一つは、UserRegistrationActionクラスにおいて、forwardの値が"cartVacant"
のときや"userInsertError"だったときにどのようなJSPファイルを使用するのか
まだ指定していませんでした。
これらは/confirmorderのときと同様に、それぞれcartVacantError.jspと
userInsertError.jspを使用します。

これは、struts-config.xmlのフロー・エディター上で、/userregアイコンから
それぞれ/cartVacantError.jspアイコンと/userInsertError.jspアイコンに「進む」
の矢印線をつなぐことでコードが自動生成されます。

これらの作業手順は/confirmorderのとき(vol.200)と同様ですので、各自やって
みて下さい。
念のために、下に手順を書いておきます。

◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆

(1) プロジェクト・エクスプローラーのStrutsShop配下のWebContent配下の
WEB-INF配下のstruts-config.xmlをダブル・クリックします。
(あるいは、フロー・エディターを確実に開くためには、WEB-INF配下の
struts-config.xmlを右クリック→「アプリケーションから開く」→
「struts-config.xmlエディター」を選択します。)

(2) struts-config.xmlのフロー・エディターが開いたら(画面がかなり
混み合ってきましたので)「struts-config.xml」タブをダブル・クリック
してエディターを最大化しておきましょう。(元に戻すには再度タブを
ダブル・クリック)

(3) 左側に並んでいるアイコンのうち、「進む」をクリックし、/userregのアイコン
をクリックし、続いて、以前貼り付けていた/cartVacantError.jspのアイコン
をクリックします。そうすると、2つのアイコンの間に矢印の線が引かれますね。
このままだと、この矢印線を引くモードのままになっているので、いったん「選択」
というアイコンをクリックすることによってモードを解除しておいて下さい。

(4) 先ほどの矢印線に「forward1」というような文字列が付いていると思いますが、
これを

cartVacant

に書き換えて下さい。(文字列を書き換えるには文字列を2回クリック
(ダブル・クリックではない。1回目のクリックで選択、2回目のクリック
で文字列の変更の意味になる)します。)

(5) 同様に、左側に並んでいるアイコンのうち、「進む」をクリックし、/userreg
のアイコンをクリックし、続いて、以前貼り付けていた/userInsertError.jspのアイ
コンをクリックします。そうすると、2つのアイコンの間に矢印の線が引かれますね。
このままだと、この矢印線を引くモードのままになっているので、いったん「選択」
というアイコンをクリックすることによってモードを解除しておいて下さい。

(6) 先ほどの矢印線に「forward1」というような文字列が付いていると思いますが、
これも同様にして

userInsertError

に書き換えて下さい。

(7) 最後に、Ctrl + Sキーでファイルを保管しておきましょう。

◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆


それからもう一つは、ConfirmOrderActionクラスにおいて、forwardの値が
"useridInvalid"のときと"passwordInvalid"のときに対してどのようなJSPファイル
を使用するのかまだ指定していませんでした。
それをこれからやっていきましょう。


では、struts-config.xmlのフロー・エディターを開いて、最大化しておきましょう。

(1) フロー・エディターの左側に並んでいるアイコンのうち、「ページ」を
クリックし、/confirmorderのアイコンの左下のどこか空いている白い領域をクリック
しましょう。

(2) 貼り付いたアイコンの文字列を

/useridInvalid.jsp

に書き換えて下さい。(文字列を書き換えるには文字列を2回クリック
(ダブル・クリックではない。1回目のクリックで選択、2回目のクリック
で文字列の変更の意味になる)します。)

(3) 再度、フロー・エディターの左側に並んでいるアイコンのうち、「ページ」を
クリックし、/confirmorderのアイコンの左下のどこか空いている白い領域をクリック
しましょう。

(4) 貼り付いたアイコンの文字列を

/passwordInvalid.jsp

に書き換えて下さい。

(5) 続いて、左側に並んでいるアイコンのうち、「進む」をクリックし、
/confirmorderのアイコンをクリックし、次に、先ほど貼り付けた
/useridInvalid.jspのアイコンをクリックします。
そうすると、2つのアイコンの間に矢印の線が引かれますね。

そのまま、再度、/confirmorderのアイコンをクリックし、先ほど貼り付けた
/passwordInvalid.jspのアイコンをクリックします。
そうすると、これらの2つのアイコンの間にも矢印の線が引かれますね。

このままだと、矢印線を引くモードのままになっているので、いったん「選択」
というアイコンをクリックすることによってモードを解除しておいて下さい。

(6) 先ほどの2つの矢印線にそれぞれ「forward1」と「forward2」いうような文字列
が付いていると思いますが、これらをそれぞれ「forward1」(/confirmorderアイコン
と/useridInvalid.jspアイコンの間の矢印線)は

useridInvalid

に書き換え、「forward2」(/confirmorderアイコンと/passwordInvalid.jspアイコン
の間の矢印線)は

passwordInvalid

に書き換えて下さい。

(7) Ctrl + Sキーでファイルを保管しておきましょう。



◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆


このままだと、/useridInvalid.jspのアイコンと/passwordInvalid.jspのアイコンに
警告のマーク(丸みを帯びた橙色の小さな三角形の中にエクスクラメーション・
マーク(ビックリ・マーク)が入ったアイコン)が付いていますが、これは
これらのファイルが実在しないからなので、これからそれを作成しましょう。

(1) /useridInvalid.jspのアイコンをダブル・クリックします。

(2) 「Struts JSPファイル」ウインドウが表示されたら、「完了」ボタンを
クリックします。

(3) useridInvalid.jspのエディターが開いたら、下記のように編集して保管しま
しょう。

--------------------------------------------------------
<%@ page contentType="text/html; charset=UTF-8" %>
<%@ taglib uri="/tags/struts-bean" prefix="bean" %>
<%@ taglib uri="/tags/struts-logic" prefix="logic" %>
<%@ taglib uri="/tags/struts-html" prefix="html" %>
<%@ taglib uri="/tags/struts-nested" prefix="nested" %>

<html:html>
   <head>
      <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
      <title>ユーザーIDエラー</title>
   </head>
   <body bgcolor="#77ffff" text="#fa5a00">
      <h1>ユーザーIDエラー</h1>
      <font color="#ff0000">ユーザーIDが正しくないため、処理を続行できません。</font>
      <br>
      <br>
      前ページに戻り、再度入力し直すには、下のボタンをクリックしてください。
      <form>
      <input type="button" value="前ページに戻る" onclick="history.back()">
      </form>
      <br>
      <br>
      <html:link page="/itemSelect.jsp">トップ・ページ(商品検索のページ)に戻る</html:link>
   </body>
</html:html>
--------------------------------------------------------

ここで、
<input type="button" value="前ページに戻る" onclick="history.back()">
というコードは、JavaScriptを使ってWebブラウザーの「戻る」ボタンと同じ働き
をするボタンを用意するためのものです。

(4) struts-config.xmlのフロー・エディターに戻り、今度は
/passwordInvalid.jspのアイコンをダブル・クリックします。

(5) 「Struts JSPファイル」ウインドウが表示されたら、「完了」ボタンを
クリックします。

(6) passwordInvalid.jspのエディターが開いたら、下記のように編集して保管しま
しょう。

--------------------------------------------------------
<%@ page contentType="text/html; charset=UTF-8" %>
<%@ taglib uri="/tags/struts-bean" prefix="bean" %>
<%@ taglib uri="/tags/struts-logic" prefix="logic" %>
<%@ taglib uri="/tags/struts-html" prefix="html" %>
<%@ taglib uri="/tags/struts-nested" prefix="nested" %>

<html:html>
   <head>
      <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
      <title>パスワード・エラー</title>
   </head>
   <body bgcolor="#77ffff" text="#fa5a00">
      <h1>パスワード・エラー</h1>
      <font color="#ff0000">パスワードが正しくないため、処理を続行できません。</font>
      <br>
      <br>
      前ページに戻り、再度入力し直すには、下のボタンをクリックしてください。
      <form>
      <input type="button" value="前ページに戻る" onclick="history.back()">
      </form>
      <br>
      <br>
      <html:link page="/itemSelect.jsp">トップ・ページ(商品検索のページ)に戻る</html:link>
   </body>
</html:html>
--------------------------------------------------------



◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆


では、これらのエラー・メッセージがちゃんと表示されるか動作確認して
みましょう。

(1) 「サーバー」ビューの中の「ローカル・ホストのTomcat v5.5サーバー」を
右クリックし、「開始」を選択します。しばらくして、

ローカル・ホストのTomcat v5.5サーバー[始動済み,同期済み]

というように、後ろに「始動済み」の表示が出たら、Tomcatの起動が完了しています。

(2) Webブラウザー(Internet Explorer)を起動して、URL

http://localhost:8080/StrutsShop/itemSelect.jsp

を入力しましょう。

(3) 「商品の検索」のWebページが開いたら、そのまま「商品検索」ボタンをクリック
して、次の「商品のリスト」のWebページでは全ての選択欄にチェックマークを入れて
「買物かごに入れる」ボタンをクリックしましょう。

(4) 「ショッピング・カートの中のリスト」のWebページが開いたら、そのまま
「これらの商品を購入する」ボタンをクリックしましょう。

(5) 「購入する商品」のWebページが開いたら、「お支払い方法」欄は
「クレジット・カード払い」のままにし、「会員登録済み」を選択(その左側
の丸の中をクリック)し、「ユーザーID」欄には、会員登録していないユーザーID
例えば
nouser
を入力し、「パスワード」欄には、
pass01
を入力し、「最終購入確認または新規会員登録の画面に進む」ボタンを
クリックしましょう。

(6) 「ユーザーIDエラー」のWebページが開くことを確認し、「前ページに戻る」ボタン
をクリックしましょう。

(7) 「購入する商品」のWebページに戻ったら、今度は「ユーザーID」欄には、前回
会員登録した
user01
を入力し、「パスワード」欄には、間違ったパスワード、例えば
wakaran
を入力し、「最終購入確認または新規会員登録の画面に進む」ボタンを
クリックしましょう。

(8) 「パスワード・エラー」のWebページが開くことを確認し、「前ページに戻る」ボタン
をクリックしましょう。

[以上で、「ユーザーIDエラー」や「パスワード・エラー」のメッセージがちゃんと
表示されることが確認できましたね。]

(9) 「購入する商品」のWebページに戻ったら、今度は「ユーザーID」欄には、前回
会員登録した
user01
を入力し、「パスワード」欄には、前回登録した正しいパスワード
pass01
を入力し、「最終購入確認または新規会員登録の画面に進む」ボタンを
クリックしましょう。

(10) 購入(注文)内容の確認のWebページが開いたら、前回の会員登録のときに
入力したのと同じ郵便番号、住所、氏名が表示されていることを確認し、
「購入(注文確定)する」ボタンをクリックして下さい。

(11) 注文完了のWebページ(「下記のご注文を受け付けました。」のWebページ)が
開いたら、商品のリストが正しいことを確認して下さい。

(12) ここで、Webブラウザーの「戻る」ボタン(左向きの矢印のボタン)を1回クリック
して下さい。

(13) 購入(注文)内容の確認のWebページに戻ったら、再度「購入(注文確定)する」ボタン
をクリックして下さい。

(14) 「ショッピング・カート・エラー」のWebページが開きますね。先ほど注文が
完了してショッピング・カートが空っぽになっているからです。

(15) 再度、Webブラウザーの「戻る」ボタンを今度は2回クリックして、
「購入する商品」のWebページに戻ってみましょう。

(16) 「購入する商品」のWebページに戻ったら、再度「ユーザーID」欄には、
user01
を入力し、「パスワード」欄には、
pass01
を入力し、「最終購入確認または新規会員登録の画面に進む」ボタンを
クリックしましょう。

(17) 同じく「ショッピング・カート・エラー」のWebページが開きますね。

[というわけで、「ショッピング・カート・エラー」もちゃんと表示されますね。]



さて、このように、注文を完了したあとで間違えて「戻る」ボタンなどで再度
購入(注文)内容の確認のWebページに戻って「購入(注文確定)する」ボタン
を再度クリックしてしまったとしても、その時点ではショッピング・カートが
空になっているので、エラー・メッセージが表示されるだけであり、重複して
2回注文されてしまうことはありません。

ただし、購入(注文)内容の確認のWebページで「購入(注文確定)する」ボタン
をクリックしたあと、(コンピューターがのろいなどのせいで)なかなか次の
Webページに進まず、ユーザーが(ボタンが反応していないものと勘違いして)
再度「購入(注文確定)する」ボタンをクリックしてしまったらどうなるで
しょうか?
この場合はタイミングが悪いと、まだショッピング・カートが空になっておらず、
したがってエラーにならずにそのまま重複して注文の処理がされてしまう恐れが
あります。

このような問題を避けるために、Strutsではボタンの二度押しを防止する機能
が提供されています。それをこれからお話しましょう。



◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆


(次回に続く)



┏━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
★ホームページ:
      http://www.flsi.co.jp/Java_text/
★このメールマガジンは
     「まぐまぐ(http://www.mag2.com)」
 を利用して発行しています。
★バックナンバーは
      http://www.flsi.co.jp/Java_text/
 にあります。
★このメールマガジンの登録/解除は下記Webページでできます。
      http://www.mag2.com/m/0000193915.html
★このメールマガジンへの質問は下記Webページにて受け付けて
 います。わからない所がありましたら、どしどしと質問をお寄
 せください。
      http://www.flsi.co.jp/Java_text/
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━┛

Copyright (C) 2010 Future Lifestyle Inc. 不許無断複製