japan.internet.com
japan.internet.com メンバーID
Twitter
Facebook
RSS
ピックアップ
2008年7月11日 10:00
developer.com
developer.com japan.internet.com 編集部(japan.internet.com)メールホームrss
米国 WebMediaBrands が運営する、ソフトウェア開発の専門サイト

JWLフレームワークでのAJAXコンポーネントの実装

はじめに

 2005年にIBMはJWL(JavaScript-based Widget Library)を導入しました。JWLは、豊富な入出力コンポーネントやナビゲーションコンポーネントを利用してJSPおよびHTMLページの機能を向上させるものです。JWLになじみがなく、詳しく知りたいという読者の方は、IBM Developer WorksのWebサイトに掲載されている下記の記事を読むと、JWLのおおよその機能を理解できるでしょう。

  1. Developing an application with the JWL DataGrid using Rational Application Developer
  2. The JWL Tree component
 IBMのRAD 6.0(Rational Application Developer)では、JWLのAJAXコンポーネントのサポートシステムが大幅に改良されました。この記事ではこれらのコンポーネントの概要を紹介し、ステップバイステップの演習を3つ行います。お使いのワークスペースにインポートできるサンプルソースコードも用意してあります。

AJAXタグの定義(1) ―コンテンツの取得―

 AJAXタグは、任意のJWLパネルタグの子タグとして定義しなければいけません。AJAXタグでは、パネルの代わりとなるコンテンツを定義します。AJAXタグを含むパネルが実行されると、そのAJAXタグはサーバーリクエストを生成します。サーバーはリクエストを処理して、パネルに制御を戻します。

 JWLライブラリには3つのAJAXコンポーネントが用意されています。以降では、これらのコンポーネントについて詳しく説明します。

コンテンツの取得: <hx:ajaxRefreshRequest>

 <hx:ajaxRefreshRequest>タグを使用すると、同じJSFページの親タグ内のコンテンツを非同期に置き換えることができます。置き換えるためのコンテンツはHTTP GETリクエストで取得します。このタグは、サーバーへ大量の情報を渡す必要がないとき、もしくはフォーム全体に対して少数のパラメータのみを扱いたいときに使用します。

 このタグの使い方を、順を追って見ていきましょう。なお、この記事の演習はすべてRAD 6.1を使って実施しています。

  1. [File]→[New]→[Other]→[Web]→[Web Page]をクリックし、新規JSFページ「ajaxRefreshRequestExample.jsp」を作成します。
  2. 図1 ajaxRefreshRequestExample.jspの新規作成
    図1 ajaxRefreshRequestExample.jspの新規作成
  3. Sourceモードで「ajaxRefreshRequestExample.jsp」を開きます。
  4. [Palette]ペイン内で[Enhanced Faces Components]をクリックします(Webパースペクティブにいることを確認してください)。
  5. 図2 [Palette]ペインの画面
    図2 [Palette]ペインの画面
  6. Inputコンポーネントをパレットからページへドラッグ&ドロップします。リスト1のようなコードが生成されます。
  7. リスト1 Inputコンポーネントのソースコード
    <f:view>
       <body>
       <hx:scriptCollector id="scriptCollector1">
          <h:form id="form1" styleClass="form">
             <h:inputText id="text"
                          styleClass="inputText">
             </h:inputText>
          </h:form>
       </hx:scriptCollector>
       </body>
    </f:view>
    
  8. Panel Groupコンポーネントをパレットからページへドラッグ&ドロップします。
  9. Text Outputコンポーネントをパレットから手順5で追加したパネルにドラッグ&ドロップします。Outputコンポーネントの[Properties]をクリックし、[Value]フィールドに#{param.text1}と入力します。
  10. 図3 OutputTextコンポーネントのプロパティ
    図3 OutputTextコンポーネントのプロパティ
  11. Panel Groupを選択し、[Properties]→[AJAX]をクリックします。[Allow Ajax Updates]をクリックし、Ajaxリクエストを[Refresh]に設定します。
  12. 図4 AJAXのプロパティ
    図4 AJAXのプロパティ
  13. 手順7で追加した<hx:ajaxRefreshRequest>タグをクリックし、ブラウザから送られるパラメータを追加します。ここでは手順4で追加した入力フィールド「text1」を指定します。
  14. 図5 ajaxRefreshRequestのプロパティ
    図5 ajaxRefreshRequestのプロパティ
  15. Button Commandをドラッグ&ドロップし、新規ビヘイビアを追加します。このビヘイビアではターゲットアクションを「group1」とし、マウスクリックで呼び出されるようにします。
  16. リスト2 [Submit]ボタンのビヘイビアのソースコード
    <hx:behavior event="onclick"
                 behaviorAction="get"
                 targetAction="group1" />
    
  17. このJSFページをサーバー上で実行してみます(Websphere 6.1以上で実行していることを確認してください)。
  18. 図6 Websphere 6.1サーバー上でサンプルを実行
    図6 Websphere 6.1サーバー上でサンプルを実行
  19. ページが読み込まれたら、入力フィールドに値を入力し、ボタンをクリックします。入力した値がボタンの横に表示されるはずです。
  20. 図7 ajaxRefreshRequestサンプルの出力
    図7 ajaxRefreshRequestサンプルの出力
 リスト3は、ここまで作成してきたサンプルの全ソースコードです。全体のソースコードはこの記事のダウンロードサンプルにも収録されています。

リスト3 ajaxRefreshRequestサンプルの全ソースコード
<f:view>
   <body>
   <hx:scriptCollector id="scriptCollector1">
      <h:form id="form1" styleClass="form">
         <h:inputText id="text1"
                      styleClass="inputText">
         </h:inputText>
         <hx:commandExButton type="submit"
                             value="Submit"
                             id="button1"
                             styleClass="commandExButton">
            <hx:behavior event="onclick"
                         behaviorAction="get"
                         targetAction="group1">
            </hx:behavior>
         </hx:commandExButton>
         <h:panelGroup    id="group1" styleClass="panelGroup">
            <h:outputText id="text2"  styleClass="outputText"
                          value="#{param.text1}">
            </h:outputText>
         </h:panelGroup>
         <hx:ajaxRefreshRequest id="ajaxRefreshRequest1"
                               target="group1" params="text1">
         </hx:ajaxRefreshRequest>
      </h:form>
   </hx:scriptCollector>
   </body>
</f:view>

AJAXタグの定義(2) ―コンテンツの更新―

コンテンツの更新: <hx:ajaxRefreshSubmit>

 <hx:ajaxRefreshSubmit>タグを使用すると、同じJSFページの親タグ内のコンテンツを非同期に置き換えることができます。置き換えるためのコンテンツはHTTP POSTリクエストで取得します。このタグはフォーム全体をサーバーへ送信したいときに使用します。

 このタグの使い方を、順を追って見ていきましょう。

  1. [File]→[New]→[Other]→[Web]→[Web Page]をクリックして、新規JSFページ「ajaxRefreshSubmitExample.jsp」を作成します。
  2. 図8 新規JSFページの作成
    図8 新規JSFページの作成
  3. Sourceモードで「ajaxRefreshSubmitExample.jsp」を開きます。
  4. [Palette]ペインで、[Enhanced Faces Components]をクリックします(Webパースペクティブにいることを確認してください)。
  5. 図9 [Palette]ペイン
    図9 [Palette]ペイン
  6. 3つの入力コンポーネントをパレットからページへドラッグ&ドロップします。これでリスト4のコードが生成されます。
  7. リスト4 3つの入力テキストフィールドのコード
    <hx:scriptCollector id="scriptCollector1">
    <h:form id="form1" styleClass="form">
       <h:inputText id="text1"
                    styleClass="inputText">
       </h:inputText>
       <h:inputText id="text2"
                    styleClass="inputText">
       </h:inputText>
       <h:inputText id="text3"
                    styleClass="inputText">
       </h:inputText>
    </h:form>
    </hx:scriptCollector>
    
  8. Panel Groupコンポーネントをパレットからページへドラッグ&ドロップします。
  9. Text Outputコンポーネントをパレットから手順5で追加したパネルへドラッグ&ドロップします。
  10. Panel Groupを選び、[Properties]→[AJAX]をクリックします。[Allow Ajax Updates]をクリックしてAjaxリクエストを[Submit]に設定します。
  11. 図10 AJAXのプロパティ
    図10 AJAXのプロパティ
  12. Button Commandをドラッグ&ドロップし、新規ビヘイビアを追加します。このビヘイビアではターゲットアクションを「group1」とし、マウスクリックで呼び出されるようにします。
  13. リスト5 [Submit]ボタンのビヘイビアのコード
    <hx:behavior event="onclick"
                 behaviorAction="get"
                 targetAction="group1" />
    
  14. 3つの変数text1、text2、text3を持つ新規Javaクラス「ThreeStringsConcatenatorBean.java」を作成します。
  15. 図11 新規^^Java^^クラスThreeStringsConcatenatorBean.javaの作成
    図11 新規^^Java^^クラスThreeStringsConcatenatorBean.javaの作成
  16. ThreeStringsConcatenatorBean.javaの中に、変数のゲッターメソッドおよびセッターメソッドを作成します。text1、text2、text3を結合して結果を返すgetConcatenateThreeFields()というメソッドを新たに追加します。
  17. リスト6 getConcatenateThreeFields()メソッドの実装
    public String getConcatenateThreeFields() {
    
       return text1 + text2 + text3;
    
    }
    
  18. ajaxRefreshSubmitExample.jspを選択します。[Page Data]画面で、[Faces Managed Beans]→[New]→[Faces Managed Bean]を選択します。
  19. 図12 新規Faces Managed Beanの作成
    図12 新規Faces Managed Beanの作成
  20. ThreeStringsConcatenatorBeanというJavaBeanを「faces-config.xml」に登録します。
  21. 図13 新規Faces Managed Beanの登録
    図13 新規Faces Managed Beanの登録
  22. JavaBean内のフィールドをページ上へドラッグして、これらのフィールドをJSPページ内のフィールドと対応付けます。
  23. 図14 Bean内のフィールドをページ上のInputフィールドに対応付け
    図14 Bean内のフィールドをページ上のInputフィールドに対応付け
  24. サーバー上でこのページを実行してみます(Websphere 6.1以上で実行していることを確認してください)。
  25. 図15 サーバー上でサンプルを実行
    図15 サーバー上でサンプルを実行
  26. コードが正しく動作するかどうかをテストしてください。
  27. 図16 ajaxRefreshSubmitサンプルの出力結果
    図16 ajaxRefreshSubmitサンプルの出力結果
 リスト7は、ここまで作成してきたサンプルの全ソースコードです。全体のソースコードはこの記事のダウンロードサンプルにも収録されています。

リスト7 ajaxRefreshSubmitの全ソースコード
<f:view>
   <body>
   <hx:scriptCollector id="scriptCollector1">
      <h:form id="form1" styleClass="form">
         <h:inputText id="text1"
                       styleClass="inputText"
                       value="#{concatenatorBean.text1}">
         </h:inputText>
         <h:inputText id="text2"
                      styleClass="inputText"
                      value="#{concatenatorBean.text2}">
         </h:inputText>
         <h:inputText id="text3"
                      styleClass="inputText"
                      value="#{concatenatorBean.text3}">
         </h:inputText>

         <hx:commandExButton type="button"
                             value="Submit"
                             id="button1"
                             styleClass="commandExButton">
            <hx:behavior behaviorAction="get;stop"
                         event="onclick"
                         targetAction>="group1" >
            </hx:behavior>
         </hx:commandExButton>

         <h:panelGroup id="group1" styleClass="panelGroup">
            <h:outputText id="text4"
                          styleClass="outputText"
                          value="#{concatenatorBean.
                                   concatenateThreeFields}">
            </h:outputText>
         </h:panelGroup>

         <hx:ajaxRefreshSubmit id="ajaxRefreshSubmit1"
                               target="group1" >
         </hx:ajaxRefreshSubmit>
      </h:form>
   </hx:scriptCollector>
   </body>
</f:view>

AJAXタグの定義(3) ―外部コンテンツの取得―

外部コンテンツの取得: <hx:ajaxExternalRequest>

 <hx:ajaxExternalRequest>では、親タグのコンテンツを別のページのコンテンツで置き換える方法を定義します。置き換えるためのコンテンツはHTTPGETメソッドで取得します。このタグは1つのJSPを他のJSPのコンテンツに組み込みたいときに役に立ちます。

 このタグの使い方を、順を追って見ていきましょう。

  1. [File]→[New]→[Other]→[Web]→[Web Page]をクリックし、新規JSFページ「ajaxExternalRequestExample.jsp」を作成します。
  2. 図17 ajaxExternalRequestExample.jspページの新規作成
    図17 ajaxExternalRequestExample.jspページの新規作成
  3. [File]→[New]→[Other]→[Web]→[Web Page]をクリックし、新規JSFページ「externalPage.jsp」を作成します。ページ内に「External Page is Loaded!」と入力します。
  4. Sourceモードで「ajaxExternalRequestExample.jsp」を開きます。
  5. [Palette]ペインで、[Enhanced Faces Components]をクリックします(Webパースペクティブにいることを確認してください)。
  6. 図18 [Palette]ペインの画面
    図18 [Palette]ペインの画面
  7. Panel Groupコンポーネントをパレットからページにドラッグ&ドロップします。
  8. Text Outputコンポーネントをパレットから手順5で追加したパネルにドラッグ&ドロップします。コンポーネントの値を「External Page will be loaded here.」に設定します。
  9. Panel Groupを選択し、[Properties]→[AJAX]をクリックします。[Allow Ajax Updates]をクリックして、Ajaxリクエストを[External]に設定します。
  10. 図19 AJAXプロパティの画面
    図19 AJAXプロパティの画面
  11. 手順7で追加した<hx:ajaxExternalRequest>タグをクリックし、さらに[Properties]をクリックしてください。URLフィールドに「externalPage.faces」と入力します。
  12. 図20 AjaxExternalRequestのプロパティ
    図20 AjaxExternalRequestのプロパティ
  13. サーバー上でこのページを実行してみましょう(Websphere 6.1以上で実行していることを確認してください)。
  14. コードが正しく動作するかどうかをテストしてください。
  15. 図21 AjaxExternalRequestサンプルの出力結果
    図21 AjaxExternalRequestサンプルの出力結果
 リスト8は、ここまで作成してきたサンプルの全ソースコードです。全体のソースコードはこの記事のダウンロードサンプルにも収録されています。

リスト8 AjaxExternalRequestの全ソースコード
<f:view>
   <body>
   <hx:scriptCollector id="scriptCollector1">
      <h:form id="form1" styleClass="form">

      <hx:commandExButton type="submit"
                          value="Submit"
                          id="button1"
                          styleClass="commandExButton">
         <hx:behavior event="onclick"
                      behaviorAction="get;stop"
                      targetAction="group1">
         </hx:behavior>
      </hx:commandExButton>
      <h:panelGroup id="group1" styleClass="panelGroup">
         <h:outputText id="text2"
                       styleClass="outputText"
                       value="External Page will be loaded here!">
         </h:outputText>
      </h:panelGroup>
         <hx:ajaxExternalRequest id="ajaxExternalRequest1"
                                 target="group1"
                                 href="externalPage.faces"
                                 source="group1">
         </hx:ajaxExternalRequest>
      </h:form>
   </hx:scriptCollector>
   </body>
</f:view>

参考

 AJAXのコンポーネント(WebSphere Information Center)

著者紹介

Aleksey Shevchenko(Aleksey Shevchenko)
オブジェクト指向言語に関わる仕事に8年間従事。過去4年間は、技術リーダー、プロジェクトマネージャを務める。金融、メーカー、出版の各業界にエンタープライズITソリューションを提供。

プリンター用
記事を転送
この記事をクリップ!
【特別連載企画】au 版「GALAXY」の実力は?--ISW11SC 速攻レビュー
【特別連載企画】au 版「GALAXY」の実力は?--ISW11SC 速攻レビュー KDDI(au)から、NTT ドコモの人気スマートフォン「GALAXY S II」を大幅に進展させた「GALAXY SII WiMAX ISW11SC」が発売される。サムスンがこれまでに蓄積してきたノウハウが詰まった本機の実力をレポートする。
⇒詳細記事はこちら
⇒連載記事一覧はこちら
注目のトピックス
最新コラム一覧
週刊-サイト別アクセス状況データ
週刊-サイト別アクセス状況データ
12月の主婦層、ベルメゾンが首位を維持(VRI 調査)
アウンのグローバルマーケティング動向
アウンのグローバルマーケティング動向
Web プロモーションにおいて大切なこと―年度末編―
百式のネットビジネス研究
百式のネットビジネス研究
起業に必要なおすすめ Web サービスを紹介してくれる「BEST Vendor」
多言語×Web×海外マーケティング情報
多言語×Web×海外マーケティング情報
海外発、注目 AR プロモーション
エンジニア転職ノウハウ開発室
エンジニア転職ノウハウ開発室
楽天が目指す変革──Globalization、Agile、Big Data
中国・台湾ネットビジネス情報最前線
中国・台湾ネットビジネス情報最前線
中国から Web を見てもらいたいならば
マーケティングに活用できる最新トレンド
マーケティングに活用できる最新トレンド
改めて、「導線」最適化に目を向ける
次世代マーケティングチェーンの視点
次世代マーケティングチェーンの視点
ソーシャル時代における BtoC 型 Eコマース成功のポイント
Copyright 2012 internet.com K.K. (Japan) All Rights Reserved.