First Previous Next Last チュートリアル : WEBアプリケーションの開発  05/19/03 09:45:01 

Lesson 6    データを表示するアクションの定義

 
Top of page

学習する内容

このレッスンでは、データを表示するStrutsカスタムタグ、およびStrutsアクションを処理するJavaコードについて学習します。 設定ファイルで、コントローラがアクションについて認識しなければならない内容についても指定します。

学習内容は次のとおりです。

 
Top of section

実行する内容

  1. データベースからデータを取得する

  2. Struts設定ファイルでアクションを定義する

  3. Actionクラスを使用してJSPページのデータを設定する

  4. JSPページに取得したデータを表示する

  5. アプリケーションを配備する

  6. today.jspをテストする

所要時間   約10分

注記:   このレッスンでは、配備およびテストのエクササイズ用にJ2EEアプリケーションサーバを実行する必要があります。

 
Top of page

データベースの照会

Proverbsアプリケーションのアクティビティの1つには、今日のことわざの表示があります。 ユーザが[Today痴 Proverb]リンクを選択すると、URLtoday.doがサーバに送信されます。 コントローラは、このURLを認識し、Struts処理を呼び出します。 コントローラは、適切なことわざを使用してデータオブジェクトを設定するTodayActionクラスで、メソッドを呼び出します。 コントローラは、返される値に基づき、JSPページを選択してユーザにこのデータを表示します。

ことわざのデータを処理するため、アプリケーションには次の項目があります。

ビジネス論理をアプリケーションの流れから切り離しておくため、データアクセスメソッドはProverbDataAccessクラスで分離されています。つまり、アプリケーションのどのActionクラスでも、データベースは直接照会されません。

 
Top of section

EXERCISE 6-1: データベースからデータを取得する

このエクササイズでは、ProverbDataAccessクラスが、どのようにデータベースを照会し、Proverbクラスを使用して取得したデータのJavaコレクションを作成するか確認します。

  1. Workbenchのナビゲーションペインで、Proverb.javaファイルを検索して開きます。

    これは、アーカイブレイアウトでは、[WEB-INF/classes]ディレクトリの[proverb]フォルダにあり、 ソースレイアウトでは、[src]ディレクトリ下にあります。

  2. 編集ペインで、ProverbオブジェクトをBeanにする次のコードに注意します。

  3. ProverbDataAccess.javaファイルを開き、getTodaysProverb()メソッドを検索します。

  4. コードの次の点に注意してください。

  5. ファイルを閉じます。

 
Top of page

Strutsでのアクションのサポート

復習   Lesson 1, MVCアプリケーションのアーキテクチャでは、Strutsでコントローラを使用してURLを処理する方法について説明しました。 設定ファイルstruts-config.xmlは、コントローラを設定して、各アクションに対して使用する処理をコントローラに命令します。 Javaクラスは処理を実行して、JSPページでは、ユーザに結果を表示します。

Strutsアプリケーションの次の場所でアクションを設定し、サポートします。

場所

説明

web.xml (配備記述子)

サーブレットマッピングでは、コントローラで処理するURLを指定します。 Proverbsでは、コントローラは*.do形式ですべてのURLを処理します(URLに対するサーブレットマッピングは、 EXERCISE 4-7: サーブレットマッピングを追加するですでに指定しています)。

struts-config.xml

アクション要素で、URLおよび表示するJSPページに応答するActionクラスを特定します。

Actionクラス

Struts Actionクラスを拡張するJavaクラスで、JSPページの設定を実行します。

ActionFormクラス

JSPページにフォームが含まれる場合、Struts ActionFormクラスを拡張するJavaクラスがインスタンス化され、各フォームフィールドに対するデータが保持されます。

ActionMappingsクラス

Struts ActionMappingsクラスを拡張するJavaクラスで、すべてのアクションで使用するforwardキーワードのプロパティを定義します。

JSPページ

ユーザに表示するデータは、Actionクラスのコードで生じた状況に応じて異なる場合があります。Actionクラスにより、表示するJSPページを示す値がコントローラに返されます。

Lesson 3, プロジェクトおよびアーカイブの操作では、Struts JARおよびタグライブラリをプロジェクトに追加し、これらをアーカイブの特定の場所に割り当てました。 Strutsコードを処理するためには、これらが必要となります。

このレッスンの内容   todayアクションを設定し、関連付けられたActionクラスおよびJSPページを参照します。 このアクションには、Formクラスはありません。 このレッスンで実行する内容は、次のとおりです。

 
Top of page

Strutsアクションについてのコントローラへの命令

Struts設定ファイルには、コントローラが特定のアクションパスでURLを受信した際に発生する状況を指定するアクション要素が含まれます。 アクション要素は、発生する処理、および次に表示するページを指定します。 コントローラは、このファイルを読み込み、実行しなければならない処理を判断します。

アクション要素は、次のとおりです。

  <action   path="/actionname"
            type="actionclass" >
      <forward name="keyword"    path="/target.jsp"/>
      <forward name="keyword"    path="/target.jsp"/>
  </action>

todayアクションにおけるアクションの属性および要素の使用法は、次の表のとおりです。

属性または要素

目的

todayアクションでの値

path

この処理を呼び出すURLでのキーワード。 パスは、常に「/」で始まります。 web.xmlでのサーブレットマッピングにより、pathキーワードを組み合わせてURLを形成する方法が指定されます。

完全なパスは、actionname.doで、web.xmlで設定されます。

パス/todayは、URL today.doの受信時に実行しなければならない処理をコントローラに命令します。

type

Webページを表示するために、アプリケーション環境を設定するActionクラス。

タイプcom.proverb.TodayActionは、TodayActionクラスのperform()メソッドを呼び出すようコントローラに命令します。

forward

このアクションの結果として結果として表示されるJSPページ。 Actionクラスにより、コントローラに返すforward nameが選択されます。

name属性およびpath属性により、forward nameがJSPページに関連付けられます。

Proverbsアプリケーションでは、successおよびfailureというforward値を使用しています。 perform()がforward値を返すと、コントローラは、名前の付いたforward要素のpath属性によって指定された「JSPページ」を表示します。

各アクションに対する属性値を示した表は、アプリケーションの仕様を作成する上での便利な計画ツールです( Strutsでのアクションの処理方法を参照)。 希望する場合は、その形式でtodayアクションに対して表を作成できます。

 
Top of section

EXERCISE 6-2: Struts設定ファイルでアクションを定義する

このエクササイズでは、設定ファイルにアクションを追加します。この設定ファイルは、URL today.doの取得時に実行すべき処理をコントローラに命令します。

注記:   Workbenchの/docs/tutorial/TutorialFiles/proverbsディレクトリにあるCutAndPasteCode.txtファイルから、このエクササイズ用のXMLをコピーできます。 [File]>[Open]の順に選択して、ファイルを開きます。

  1. Workbenchのナビゲーションペインで、struts-config.xmlを検索して開きます。 これは、WEB-INFディレクトリ内にあります。

  2. action-mappings要素内で、このXMLを次のように入力します。

      <action   path="/today"
                type="com.proverb.TodayAction" >
          <forward name="success"    path="/today.jsp"/>
          <forward name="failure"    path="/index.jsp"/>
      </action>
    
  3. struts-config.xmlを保存して閉じます。

  4. (オプション) web.xmlを開き、サーブレットマッピングを確認します。 アクションサーブレットですべてのURLを*.do形式で処理するよう指定されています。 ファイルを閉じます。

 
Top of page

Actionクラスでのデータの取得

TodayActionの処理は簡単です。コントローラサーブレットの初期化時にサーブレットコンテキストに保存された、アプリケーションのDataSourceオブジェクトを取得した後、ProverbDataAccessでメソッドを呼び出して今日のことわざを取得します。

 
Top of section

EXERCISE 6-3: Actionクラスを使用してJSPページのデータを設定する

このエクササイズでは、TodayActionクラスを参照します。このクラスは、ProverbDataAccessからコレクションを取得してJSPページに対して使用できるようにします。

  1. Workbenchのナビゲーションペインで、TodayAction.javaファイルを検索して開きます。

    注記:   Javaファイルは、どの場所にあるでしょうか? アーカイブレイアウトでは、WEB-INF/classesディレクトリ下にあり、 ソースレイアウトでは、srcディレクトリ下にあります。

  2. perform()メソッドでサーブレットコンテキストからDataSourceオブジェクトを取得するコードを検索します。

      ServletContext ctxt = servlet.getServletContext();
      DataSource ds = (DataSource) ctxt.getAttribute(Constants.DB_KEY);
    
  3. ProverbDataAccessクラスをインスタンス化し、getTodaysProverb()メソッドを呼び出すコードを確認します。 コンストラクタでは、DataSourceオブジェクトが引数として予期されます。

      ProverbDataAccess pda = new ProverbDataAccess(ds);
      if (pda != null)
         pvbs = pda.getTodaysProverb();
    
  4. リクエストでpvbsコレクションを保存するコードを検索します。

      request.setAttribute(Constants.PVB_KEY, pvbs);
    
  5. Constants.javaを開き、PVB_KEYの値を確認します。 JSPページは、この値を使用してコレクションを参照します。

  6. データ取得が成功した場合、perform()メソッドはsuccessというActionForward値を返します。

      fwd = "success";
      ...
      return (mapping.findForward(fwd));
    

    これは、どのJSPページを表示するかコントローラに命令します。

  7. ファイルを閉じます。

 
Top of page

データを表示するためのStrutsタグ

Strutsでは、HTMLでの表示形式をデータの集合に適用できるカスタムタグが提供されており、 取得する項目の数を、事前に把握する必要がなくなります。

today.jspには、次のタグがあります。

タグ

説明

iterate

iterateは、各オブジェクトに対して囲まれたステートメントを指定のコレクションで繰り返します。 TodayActionによってリクエストコンテキストに挿入されるコレクションは、name属性で指定されます。 iterate内にあるタグは、idの値を使用してコレクションを参照します。

JSPページtoday.jspは、iterateを使用して処理中のコレクションを特定します。コレクション内に1つしか項目が存在しない場合でも問題はありません。

write

JSPページにテキストとして値が書き込まれるProverbオブジェクトのプロパティは、writeタグのproperty属性で指定されます。

present

Strutsは、指定のプロパティに値があるかどうかチェックします。 値がある場合、Strutsは囲まれたタグおよびテキストを処理します。 today.jspでは、presentは、変換プロパティに値があるかどうかチェックし、値がない場合は、テキストラベルも省略します。

 
Top of section

EXERCISE 6-4: JSPページに取得したデータを表示する

このエクササイズでは、today.jspがどのようにコレクションにアクセスし、毎日のことわざを表示するか確認します。

  1. today.jspをダブルクリックして開きます。

  2. 編集ペインで、strutslogic:iterateタグを検索します。

      <strutslogic:iterate name="ProverbCollection" id="pvb">
    

    TodayActionがリクエストで設定したProverbCollection属性を使用します。

    name属性の値は何でしょうか? これは、Constants.javaのPVB_KEYの値です。

  3. iterateタグ内で、writeタグを検索します。 これは、複数あります。

      <strutsbean:write name="pvb" property="text" />
    

    各writeタグで、property属性はProverbクラスのプロパティを参照します。

  4. ファイルを閉じます。

プレインテキストのメッセージタグへの変換   データのh2テキストおよびテキストラベルは、このファイルでは単に英語のテキストです。 このアプリケーションを各国対応用にする場合、Strutsメッセージタグを使用して、これをどのように修正すればよいでしょうか?

ヘッダのテキストは、すでにApplicationResources.propertiesファイルの一部になっています。 次のメッセージタグでヘッダのテキストを置き換えることができます。

  <strutsbean:message key="page.today.title"/>

データラベルについては、リソースファイルにキーおよびテキストを追加してから、JSPページでこれらのキーを参照する必要があります。

For more information    Strutsメッセージタグの使用の詳細については、 Strutsによる各国対応およびローカリゼーションの有効方法を参照してください。

 
Top of page

データアクセスの配備およびテスト

データアクセスをテストして、today.jspでことわざのデータが表示されるか確認できる段階に達しました。 Lesson 4, ウェルカムページの配備およびテストでサーバプロファイルを定義し、配備設定を指定した際に、初回配備時の配備設定を行いました。 この時点で必要な作業は、作成して配備することだけです。

 
Top of section

EXERCISE 6-5: アプリケーションを配備する

  1. Workbenchで、[Project]>[Build and Archive]の順に選択します。

    [Output]ペインの[Build]タブでエラーが表示されないようにします。

  2. メニューから[Project]>[Deploy Archive]の順に選択します。

    [Output]ペインで、簡単な作成出力が表示された後、[Deploy]タブに切り替わり、進行状況を知らせるメッセージが表示されます。 エラーが表示されないようにします。

 
Top of section

EXERCISE 6-6: today.jspをテストする

  1. ブラウザが実行されている場合、新しいブラウザウィンドウを開きます。 ブラウザが実行されていない場合は、今すぐ起動します。

  2. アプリケーションのURLを入力します。 SilverStreamサーバの一般的なURLは、次のとおりです。

      http://localhost/ProverbsCloud/ProverbStart/index.jsp
    
  3. アプリケーションメニューで[Today痴 Proverb]をクリックします。

    ページにことわざが表示された場合、todayアクションを正常に設定したことになります。おめでとうございます。

    Tut1 todayspvb

動作しない場合   ことわざが表示されず、代わりにエラーが表示された場合、サーバ配備情報、配備記述子、およびStruts設定ファイルを再検査して、これらが正しいことを確認する必要があります。 次の処理を行うコードをチェックすることもできます。

ヒント:   エラーメッセージに対するサーバコンソールをチェックします。 サーバ固有のエラー がある場合、コードの編集が必要な場合があります。

 
Top of page

実行した内容のまとめ

アプリケーションの開発   このレッスンでは、Proverbsチュートリアルアプリケーションの次の部分を作成するか、次の部分について学習しました。

Workbenchツールの使用   Workbenchで、次のツールを使用しました。

次のレッスン   次のレッスンでは、ユーザからの検索条件をフォームで取得する方法、およびStrutsのサポート機能を使用してフォームを処理する方法について学習します。

    First Previous Next Last チュートリアル : WEBアプリケーションの開発  05/19/03 09:45:01 

Copyright © 1997, 1998, 1999, 2000, 2001, 2002, 2003 SilverStream Software, LLC, a wholly owned subsidiary of Novell, Inc. All rights reserved.