japan.internet.comThe Internet & IT Network
RSS
  • ニュース
  • コラム
  • リサーチ
  • ヘッドライン
  • 特集
  • ブログ
  • プレスリリース
  • 専門チャンネル
  • イベント
  • ランキング
  • ニュースメール
2008年9月6日
文字サイズ文字サイズ小文字サイズ中文字サイズ大
デベロッパー2008年7月11日 10:00

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

海外海外internet.com発の記事
  • このエントリーを含むはてなブックマーク
  • この記事をクリップ!
  • Buzzurlにブックマーク
  • Yahoo!ブックマークに登録
  • newsing it!

はじめに

 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ソリューションを提供。
関連テーマ
このエントリーを含むはてなブックマーク この記事をクリップ!
BuzzurlにブックマークBuzzurlにブックマーク Yahoo!ブックマークに登録
最新トップニュース
データメーション
【データメーション】
OSについて気に入らないこと(9月5日)
ベンチャー専門家の目利きブログ「なぜこの企業は伸びるのか?」
【ベンチャー専門家の目利きブログ「なぜこの企業は伸びるのか?」】
「導入期〜成長期へ!一歩一歩と前進を目指す『Annoii(アノイ)』」/maka hou,Inc.(9月5日)
最新テクノロジーの意外な処方箋
【最新テクノロジーの意外な処方箋】
グリッドコンピューティング技術でETに遭遇(9月5日)
Graphic Design Forum
【Graphic Design Forum】
古い Emigre を探して (9月3日)
エンジニアの独り言
【エンジニアの独り言】
データをローカルに保存するWebアプリケーション(8月22日)
デスマーチからの脱却
【デスマーチからの脱却】
30min. iPhoneアプリリリース(8月18日)
最新ハイテク講座
最新ハイテク講座
なぜ勝った? 世界No.1シェアをつかんだ“Windows”(9月5日)
developer.com
developer.com
デザインパターンの使い方: Composite(9月5日)
最新アフィリエイト事例にみる成功の法則
最新アフィリエイト事例にみる成功の法則
コンバージョンレートを高めよう!(9月5日)
百式のネットビジネス研究
百式のネットビジネス研究
ガジェット購入時に将来の買取保証プランを提供する「TechForward」(9月5日)
週刊-サイト別アクセス状況データ
週刊-サイト別アクセス状況データ
ビデオリサーチインタラクティブ調査(月間インターネットオーディエンスデータ)(9月4日)
「IT の耳」
「IT の耳」
【書評】『検索にガンガンヒットさせる SEO の教科書』――SEO テクニックで効果的に PR する(9月4日)
検索エンジンマーケティング
検索エンジンマーケティング
果たしてモバイル SEO は必要なのか?(9月4日)
Eメールマーケティング事情
Eメールマーケティング事情
読者が迷惑メールと認識する時…(9月3日)
日本と韓国のインターネットビジネス最新動向調査
日本と韓国のインターネットビジネス最新動向調査
日本と韓国の動画サイト比較1―現状(9月3日)
SNSをビジネスに活用しよう
SNSをビジネスに活用しよう
「しまじろう」に学ぶ企業内コミュニティの活性化のポイント(9月2日)
海外のインターネットコムアメリカ韓国ドイツトルコ
Copyright 2008 Jupitermedia Corporation All Rights Reserved.http://www.internet.com/