本文へジャンプ

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む


お客様が developerWorks に初めてサインインすると、プロフィールが作成されます。プロフィールで選択した情報は公開されますが、いつでもその情報を編集できます。お客様の姓名(非表示設定にしていない限り)とディスプレイ・ネームは、投稿するコンテンツと一緒に表示されます。

送信されたすべての情報は安全です。

  • 閉じる [x]

developerWorks に初めてサインインするとプロフィールが作成されますので、その際にディスプレイ・ネームを選択する必要があります。ディスプレイ・ネームは、お客様が developerWorks に投稿するコンテンツと一緒に表示されます。

ディスプレイ・ネームは、3文字から31文字の範囲で指定し、かつ developerWorks コミュニティーでユニークである必要があります。また、プライバシー上の理由でお客様の電子メール・アドレスは使用しないでください。

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む


送信されたすべての情報は安全です。

  • 閉じる [x]

XForms を Google Web Toolkit と統合する、第 2 回: アーティストとアルバムの管理フォームを作成する

ロック・スター志望者のための Web アプリケーションを作成する

Michael Galpin (mike.sr@gmail.com), Developer, Ludi Labs
Michael Galpin は、1998年以来、プロとして Java ソフトウェアを開発してきています。彼は現在、カリフォルニア州のマウンテンビューにある、起業したばかりの会社、Ludi Labs に勤務しています。彼は California Institute of Technology で数学の学位を取得しています。

概要: この 4 回シリーズでは、GWT (Google Web Toolkit) と XForms とを組み合わせて動的な Web アプリケーションを作成する方法を説明します。第 1 回では、それぞれの技術の基盤としての JavaScript について調べました。第 2 回では、こうした JavaScript の基盤を使用して 2 つの技術を共存させ、ロック・スターのアプリケーションの作成を開始します。

日付:  2007年 9月 25日
レベル:  中級 この記事の原文:  英語
アクティビティー: 2675 ビュー
お気軽にご意見・ご感想をお寄せください: 


はじめに

この 4 回シリーズ第 1 回では、GWT と XForms の両方の確固たる基礎について説明し、そしてこの 2 つを組み合わせることで Web アプリケーションの作成プロセスを効率化できることを示しました。今回の第 2 回では、単純な Web アプリケーションとして、ロック・スターのアプリケーションを作成します。このアプリケーションには 2 つのページがあり、1 つのページはアーティストを表示し、もう 1 つのページはそれらのアーティストが録音したアルバムを表示します。最初のページは GWT を使って作成し、そこでは GWT のウィジェットと Ajax によって抽象化された GWT を使います。このページは 2 番目のページにリンクされます。2 番目のページは XForms を使って作成され、このページの UI の作成には XForms のデータ・モデルと XForms のコントロールが使われます。

前提条件

このシリーズの第 1 回、「GWT の JSNI (JavaScript Native Interface) を紹介する」を読んでください。

この記事では、GWT のバージョン 1.4 と Mozilla の XForms プラグイン 0.8 を使います (ダウンロードのためのリンクは「参考文献」を参照してください)。Mozilla の XForms プラグインは、Mozilla ベースの Web ブラウザー (Firefox や Seamonkey など) であれば、どのブラウザーでも動作します。GWT を使うには、Java™ 言語の知識と HTML や CSS などの Web 技術の知識が必要です。また、この記事では JavaScript も頻繁に使います。XForms は Model-View-Control のパラダイムを頻繁に使うため、このパラダイムに慣れておくと役に立ちます。これまでに XForms と GWT を経験したことがあると、もちろん助けになりますが、必須ではありません。この記事のコードは Eclipse 3.3 を使って作成しましたが、Eclipse を知っている必要はありません。


GWT を使ってアーティストを管理する

この、ロック・スターのアプリケーションで最初にしなければならないことは、すべてのアーティストのリストを入手することです。もちろん、このリストに新しいアーティストを追加できる必要もあります。またこのリストは、2 番目のページにナビゲートするための手段も提供します。2 番目のページでは、ある特定のアーティストが録音したアルバムを管理することができます。この、アーティストのページでは、GWT を使います。GWT に組み込みのウィジェットを利用してこのページ用の洗練された UI を作成し、また Ajax によって抽象化された GWT を使ってデータのロードと保存を単純化します。

アプリケーション・データ

このアプリケーションのデータは、単純な XML ファイルに保存されます。XML はデータ転送のための一般的なフォーマットであり、そしてもちろん、XForms のネイティブ・フォーマットです。データはリレーショナル・データベースに簡単に保存できますが、結局さまざまな目的のためにそのデータを XML としてシリアライズする羽目になる可能性がかなりあります。データの保存にリレーショナル・データベースを使わずに XML を使うことで単純になり、このアプリケーションの本来のスターである、GWT と XForms に集中することができます。

GWT によるアーティストのモデル

アーティストを表現するために、このアプリケーションのための単純なデータ・モデルが必要です。GWT を使うと、単純な Java Bean を作成するだけの簡単な作業ですんでしまいます (リスト 1)。


リスト 1. アーティストのモデル: Java Bean
                
package org.developerworks.rockstar.client;

import com.google.gwt.user.client.rpc.IsSerializable;

public class Artist implements IsSerializable{
     private int id;
     private String name;
     private String genre;
     
     public Artist(){
          // needed for GWT's RPC mechanism
     }
     public Artist(int id, String name, String genre) {
          this.id = id;
          this.name = name;
          this.genre = genre;
     }
     public int getId() {
          return id;
     }
     public void setId(int id) {
          this.id = id;
     }
     public String getName() {
          return name;
     }
     public void setName(String name) {
          this.name = name;
     }
     public String getGenre() {
          return genre;
     }
     public void setGenre(String genre) {
          this.genre = genre;
     }
}

先ほど触れたように、これは単なる標準的な Java Bean にすぎません (3 つのフィールドを持ち、それぞれに対応してゲッターとセッターがあります)。簡単にアーティストを参照できるように、アーティストに対しては数値 ID を使います。アーティストを保存するためにデータベース・テーブルが使われていたのであれば、おそらくこの数値 ID も既にあるはずです。これがアプリケーションのクライアント・パッケージの中にあることに注意してください。そのため、このクラスは JavaScript にコンパイルされます。ただし、それが皆さんに関係するわけではありません。相変わらずこのクラスを Java でプログラムすることができ、その先の JavaScript にまで注意を払う必要はありません。最後に、このクラスが IsSerializable マーカー・インターフェースを実装していることに注意してください。このインターフェースの実装は、(例えば Ajax の呼び出しに対するリクエストまたはレスポンスの一部として) ネットワーク上で送信されるすべてのクラスに必要です。それでは、Artist オブジェクトのリスト用の UI を GWT を使って作成する方法を調べてみましょう。


GWT のウィジェットを使ってアーティストのリストを作成する

GWT に数多くある便利なことの 1 つが、一般的な UI の構造を作成するための一連のウィジェットが用意されていることです。これにより、UI の要素を作成するためにおなじみの Java の構文を使うことができます。Swing あるいは SWT のプログラミング経験のある人ならば、こうしたことにはかなり慣れているはずです。ここでは FlexTable を使います。これは動的な表であり、このアプリケーションに非常に適しています。ここではアーティストの数が固定されていないからです。FlexTable は、アーティストの数に合わせて拡張されます。FlexTable にデータを入力するためのコードをリスト 2 に示します。


リスト 2. アーティストの表を作成する
                
  private void populateTable(Artist[] artists){
      // clear the table
       int rowCount = this.artistTable.getRowCount();
       for (int i=0;i<rowCount;i++){
            this.artistTable.removeRow(i);
       }
      // create the header
      this.artistTable.getRowFormatter().addStyleName(0, "tableHeader");
      this.artistTable.setText(0, 0, "Name");
      this.artistTable.setText(0, 1, "Genre");
      // now add artists
      for (int i=0;i<artists.length;i++){
           this.artistTable.setText(i+1, 0, artists[i].getName());
           this.artistTable.setText(i+1, 1, artists[i].getGenre());
      }
      this.artistTable.setBorderWidth(4);
  }

リスト 2 のコードは、もし既に表がある場合には、その表をクリアーします。そしてヘッダーを作成します。このヘッダーに関して唯一特別なことは、そこにスタイルが追加されることです。その箇所を簡単に確認してください。次にこのコードは、アーティストを繰り返し、表に追加します。この表が追加されるページを見てみましょう (リスト 3)。


リスト 3. アーティストのページ
                <html>
     <head>
          <title>RockStars</title>

          <!--                                           -->
          <!-- This script loads your compiled module.   -->
          <!-- If you add any GWT meta tags, they must   -->
          <!-- be added before this line.                -->
          <!--                                           -->
          <script language='javascript' src='org.developerworks.
		  rockstar.RockStarMain.nocache.js'></script>
          <style type="text/css">
               .tableHeader{
                    background-color:#AAAAAA;
               }
          </style>
     </head>
     <body>
     </body>
</html>

この HTML にはほとんど処理がありません。面倒な作業はすべて、GWT に処理させるのです。唯一、HTML らしいことと言えば、表のヘッダー用に少しばかりの CSS をインライン化したことだけです。これで、このページの UI 要素を作成できたので、あとは少しデータが必要なだけです。そのためには、Ajax を使って GWT 流に行います。


アーティストのデータを取得する: リモート・プロシージャー・コールを使う

アーティストのリストを表示するために使用できる、便利な GWT ウィジェットが用意されています。あとはリストが必要なだけです。そのためには、アーティストを管理するためのサービスを作成します。そしてこのサービスを、GWT を使って非同期に (例えば Ajax を使って) 呼び出します。これは典型的な GWT の RPC (Remote Procedure Call: リモート・プロシージャー・コール) です。まず、このサービスに対するインターフェースを宣言します (リスト 4)。


リスト 4. アーティスト・サービスのインターフェース
                
package org.developerworks.rockstar.client;

import com.google.gwt.user.client.rpc.RemoteService;

public interface ArtistService extends RemoteService {
     public Artist[] getAllArtists();
     public void addArtist(Artist newArtist);
}

このサービスが GWT のマーカー・インターフェース RemoteService を継承していることに注意してください。これは GWT の規則として必要です。また getAllArtists() を呼び出すと Artist オブジェクトの配列が返されることにも注意してください。これらのオブジェクトは、先ほどデータ・モデルとして定義した Artist オブジェクトと同じものです。getAllArtists() を呼び出したときに Collection<Artist> あるいは List<Artist> を返すようにしたいという誘惑にかられるかもしれませんが、そうしてはいけません。GWT はクライアント・コード (例えば JavaScript にコンパイルされるコード) では Generics をサポートしていません。JavaScript には Generics はなく、また Generics タイプの情報は、いずれにせよ実行時には利用できません。java.util.List を返すこともできますが (これらは許されています)、配列でも問題なく動作し、しかも強い型付けがされています。

GWT では、クライアントから呼び出されるインターフェースはすべて非同期でなければなりません。このサービスのインターフェースの非同期バージョンをリスト 5 に示します。


リスト 5. 非同期のサービス・インターフェース
                
package org.developerworks.rockstar.client;

import com.google.gwt.user.client.rpc.AsyncCallback;

public interface ArtistServiceAsync {
     public void getAllArtists(AsyncCallback callback);
     public void addArtist(Artist newArtist, AsyncCallback callback);
}

ここで重要なことは、サービス名に付いている Async という接尾辞です。この命名規則によって、GWT はこのインターフェースをリスト 4 に示すインターフェースと突き合わせます。また、すべての呼び出しが非同期に行われていること、つまり戻り型が void であることにも注意してください。これらの呼び出しはすべて AsyncCallback 型の引数が渡されているため GWT は、このインターフェースのサーバー・サイドの実装が (この実装に対する) リクエストの処理を終了すると、このコールバックを呼び出すことができます。では、このインターフェースのサーバー・サイドの実装を見てみましょう (リスト 6)。


リスト 6. このインターフェースのサーバー・サイドの実装
                
package org.developerworks.rockstar.server;

import java.util.List;

import org.developerworks.rockstar.client.Artist;
import org.developerworks.rockstar.client.ArtistService;

import com.google.gwt.user.server.rpc.RemoteServiceServlet;

public class ArtistServiceImpl extends RemoteServiceServlet implements ArtistService {

     private static final long serialVersionUID = -1801240935065207659L;
     
     private List<Artist> artists;
     private ArtistDao dao;
     
     public ArtistServiceImpl(){
          this.dao = new ArtistFileDao();
          this.artists = this.dao.getAllArtists();
     }

     public void addArtist(Artist newArtist) {
           newArtist.setId(this.artists.size());
          this.artists.add(newArtist);
          dao.saveArtists(this.artists);
     }

     public Artist[] getAllArtists() {
          Artist[] array = new Artist[this.artists.size()];
          return this.artists.toArray(array);
     }
     
}

このクラスに関して、注目すべき点がいくつかあります。1 つは、このクラスが、定義されたインターフェースを実装することに加えて RemoteServiceServlet を継承していることです。RemoteServiceServlet は古典的な Java サーブレットであり、Ajax リクエストを処理するために設計されています。実行時にはクライアント・コードからのリクエストによってスーパークラスのメソッドが呼び出され、そしてスーパークラスはクライアントが要求する実際のメソッドをリフレクションを使って呼び出します。最後に、DAO (Data Access Object) インターフェース、ArtistDao を使っていることに注意してください。ここではファイル・ベースの実装である ArtistFileDao を使っていますが、これを簡単にデータベース・ベースの実装と交換することができます。またこのクラスには、ファイルの読み書きと XML の構文解析のための面倒なコードもすべて含まれています。では、このアプリケーションをテストしてみましょう。


アーティストを表示する: ホスト・モード

ここまでは、すべては純粋な GWT でした。GWT の便利なことの 1 つは、ホスト・モードを使用できることです。Eclipse を使用している場合には、Eclipse からアプリケーションを起動して表示することができます。ただし、まず少しばかりデータが必要です。簡単なデータ・ファイルをリスト 7 に示します。


リスト 7. テスト・データ
                <?xml version="1.0" encoding="UTF-8"?>
<Data>
     <Artist>
          <Id>0</Id>
          <Name>The Struts Five</Name>
          <Genre>Classic Rock</Genre>
     </Artist>
     <Artist>
          <Id>1</Id>
          <Name>Spring Flow</Name>
          <Genre>Techno</Genre>
     </Artist>
     <Artist>
          <Id>2</Id>
          <Name>The Holy Grails</Name>
          <Genre>Funk</Genre>
     </Artist>
     <Artist>
          <Id>3</Id>
          <Name>The Rails Way</Name>
          <Genre>Pop</Genre>
     </Artist>
     <Artist>
          <Id>4</Id>
          <Name>Cake Clone</Name>
          <Genre>Pop</Genre>
     </Artist>
     <Artist>
          <Id>5</Id>
          <Name>Obscure Tapestry</Name>
          <Genre>Techno</Genre>
     </Artist>
     <Artist>
          <Id>6</Id>
          <Name>Dojo Darling</Name>
          <Genre>Classic Rock</Genre>
     </Artist>
     <Artist>
          <Id>7</Id>
          <Name>Cairingorm</Name>
          <Genre>Progressive</Genre>
     </Artist>
     <Artist>
          <Id>8</Id>
          <Name>ProtoStripes</Name>
          <Genre>Thrash</Genre>
     </Artist>
</Data>


これでテスト・データは用意できたので、アプリケーションを起動します。そうすると図 1 のようなインターフェースが表示されるはずです。


図 1. ホスト・モードでアーティストを表示する

ここに表示されているのは、テスト・データの中にあるアーティストのリストです。今度は、新しいアーティストを入力するための単純なフォームが必要です。


新しいアーティストを追加する: GWT を使ってフォームを作成する

新しいアーティストを入力するためには、簡単なデータ入力フォームが必要です。幸い GWT には、フォームを作成するためのウィジェットも含まれています。GWT を使うことで、プログラムでフォームを作成することができます (リスト 8)。


リスト 8. GWT を使ったデータ入力フォーム
                
public class RockStarMain implements EntryPoint {

     // Widgets for the page
     final FlexTable artistTable = new FlexTable();
     final VerticalPanel outerPanel = new VerticalPanel();
     final HorizontalPanel formPanel = new HorizontalPanel();
     final Label artistLabel = new Label("Artist Name:");
     final TextBox artistInput = new TextBox();
     final Label genreLabel = new Label("Genre:");
     final TextBox genreInput = new TextBox(); 
     final Button addButton = new Button("Add Artist");
     
  /**
   * This is the entry point method.
   */
  public void onModuleLoad() {
     // add the outer panel, then add to it
     RootPanel.get().add(outerPanel);
     outerPanel.add(artistTable);
     outerPanel.add(formPanel);
     
     // arrange form elements horizontally
     formPanel.add(artistLabel);
     formPanel.add(artistInput);
     formPanel.add(genreLabel);
     formPanel.add(genreInput);
     formPanel.add(addButton);
     
     // add event listener to our button
     ClickListener listener = new ClickListener(){

          public void onClick(Widget sender) {
               addNewAritst();
          }
          
     };
     addButton.addClickListener(listener);
     
    // load the artists now all the widgets are ready
    this.loadArtists();
  }

このコードも、驚くほど単純です。ラベルとテキスト・ボックス、そしてボタン (そして作業対象である FlexTable) という、一連のウィジェットを作成します。また、これらのウィジェットを配置するためのレイアウト・マネージャーのように動作する、いくつかのパネルを使います。次に、新しいアーティストを追加するためのボタンの 1 つにイベント・リスナーを追加します。このイベント・リスナーがバックエンドのサービスを呼び出します。ではこれをリスト 9 で見てみましょう。


リスト 9. 新しいアーティストのメソッドを追加する
                
  private void addNewAritst(){
       Artist artist = new Artist(-1, artistInput.getText(), genreInput.getText());
       ArtistServiceAsync artistService = getArtistService();
       
       AsyncCallback callback = new AsyncCallback(){

          public void onFailure(Throwable caught) {
               // remove last row because of failure
               removeLastArtist();
          }

          public void onSuccess(Object result) {
               // nothing to do here since we added optimistically
          }
            
       };
       
       artistService.addArtist(artist, callback);
       // we'll be optimistic and go ahead and add to the table
       int size = this.artistTable.getRowCount();
       this.artistTable.setText(size, 0, artist.getName());
       this.artistTable.setText(size, 1, artist.getGenre());
  }


このコードを見ると、このインターフェースの非同期バージョンが呼び出されていることがわかります。そして非同期のコールバック・メソッドが作成されています。このコールバック・メソッドは非常に単純で、処理が行われるのは、この呼び出しが失敗した場合のみです。これは、サーバーからの応答を待たずに先行して表にアーティストを追加しているためです。アーティストの追加は瞬時に行われるため、こうすることで適切なユーザー・エクスペリエンスを実現することができます。ただしこれは、失敗が非常に稀であるということを前提にしています。完全なソース・コードのダウンロードは、この記事の最後に用意されています。これでフォームを追加できたので、今度は UI を見てみましょう (図 2)。


図 2. アーティストを表示し、新しいアーティストを追加する

フォームに入力し、Add Artist ボタンをクリックします。UI が瞬時に更新されるはずです (図 3)。


図 3. 追加されたアーティスト

GWT を使って UI 要素を作成する方法、そして Ajax を使うことでバックエンド・サービスからデータを取得でき、そこにデータを保存できることがわかりました。では今度は、アルバムを管理するためのページを XForms を使って作成する方法を見てみましょう。


XForms を使ってアルバムを管理する

このアプリケーションの 2 番目の部分では、あるアーティストのアルバムのリストを表示します。当然のことですが、どのアーティストにも使用できる、アルバム表示用の 1 ページを作成します。では、どのアルバムを表示するのかを、どうやって知るのでしょう。もちろん、このためにはいくつか異なる方法がありますが、ここではコマンドのパターンを使います。このコマンドによって、このページを作成するために知らなければならないことが、すべてわかるはずです。この場合には、誰のアルバム (つまり、どのアーティストのアルバム) を表示するのかを知る必要があります。そのためには、アーティストを指定する request パラメーターが必要です。そこでこれを単純に artistId と呼ぶことにします。最初のページから 2 番目のページへのリンクが必要であり、このリンクは artistId パラメーターを持つ必要があります。


GWT のページから XForms のページにリンクする

最初のページに戻り、2 番目のページへのリンクを作成しましょう。これは、コードを少し変更するだけで実現することができます (リスト 10)


リスト 10. Artist リストにリンクを追加する
                
  private void populateTable(Artist[] artists){
      // clear the table
       int rowCount = this.artistTable.getRowCount();
       for (int i=0;i<rowCount;i++){
            this.artistTable.removeRow(i);
       }
      // create the header
      this.artistTable.getRowFormatter().addStyleName(0, "tableHeader");
      this.artistTable.setText(0, 0, "Name");
      this.artistTable.setText(0, 1, "Genre");
      // now add artists
      for (int i=0;i<artists.length;i++){
           //this.artistTable.setText(i+1, 0, artists[i].getName());
           String html = "<a href=\"Albums.jsp?artistId=
		     "+artists[i].getId()+"\">"+artists[i].getName()+"</a>";
           this.artistTable.setHTML(i+1, 0, html);
           this.artistTable.setText(i+1, 1, artists[i].getGenre());
      }
      this.artistTable.setBorderWidth(4);
  }
  

変更したのは、表の左側の列を設定するコードのみです。setText(...) を使う代わりに、setHTML(...) を使っています。こうすることで表の中に HTML を配置することができ、これによって新しいページ「Albums.jsp」への単純なリンクが作成されます。JSP を使っているため、少しばかり動的にページを作成することができます。動的な部分は、artistId で指定されたアーティストが録音したアルバムのみを表示する、という部分です。artistId パラメーターがリンクの一部であることに注目してください。あとはこのページを作成すればよいだけです。


GWT を使って XForms ページを作成する

この JSP は、HTML や CSS のページなどの Web リソースとまったく同じように作成することができます。このページにも GWT を使うことができます。必要なことは、GWT が生成する JavaScript ファイルを参照することだけです。ここでは、指定されたアーティストが録音したアルバムを、サーバー・サイドのコードを使ってロードします。このデータを XForms のモデルのインスタンス・データに直接書き込みます (リスト 11)。


リスト 11. サーバー・ロジックを使ったインライン・データ
                
<?xml version="1.0" encoding="UTF-8"?>
<xhtml:html xmlns:xforms="http://www.w3.org/2002/xforms" 
xmlns:xhtml="http://www.w3.org/1999/xhtml">
<%@page import="org.developerworks.rockstar.client.*" %>
<%@page import="org.developerworks.rockstar.server.*" %>
<%@page import="java.util.List" %>
    <xhtml:head>
        <xhtml:title>Albums</xhtml:title>
        <xforms:model id="albums">
            <xforms:instance id="albumData" xmlns="">
                 <Data>
                 <%
                      int artistId = Integer.parseInt(request.getParameter("artistId"));
                      AlbumDao dao = new AlbumFileDao();
                      List<Album> albums = dao.getAllAlbums();
                      for (Album album : albums){
                           if (album.getArtistId() == artistId){
                 %>
                      <Album>
                           <Title><%= album.getTitle() %></Title>
                           <Year><%= album.getYear() %></Year>
                      </Album>
                 <% 
                           }
                      }
                 %>
                 </Data>
            </xforms:instance>
        </xforms:model>
</xhtml:head>
    <xhtml:body>
         <xhtml:div id="albumList">
              <xforms:repeat id="repeatItem" nodeset="/Data/Album">
                   <xhtml:div>
                        <xforms:output ref="Title">
                             <xforms:label>Title:</xforms:label>
                        </xforms:output>
                        <xforms:output ref="Year">
                             <xforms:label>Year:</xforms:label>
                        </xforms:output>
                   </xhtml:div>
              </xforms:repeat>
         </xhtml:div>
    </xhtml:body>
</xhtml:html>

どのアルバムを表示するかを判断するためのロジックを、Java のスクリプトレットが処理します。このデータも XML ファイルからロードします。フィルターのためのロジックは、この記事のソース・コードの一部としてダウンロードされる外部クラスに含まれています。この場合も、いくつかのテスト・データを XML ファイルの中に作成することに注目してください。このテスト・データも、この記事のソース・コードと一緒に含まれています。


XForms のページを Web モードでテストする

これで、XForms のアルバム・ページをテストする準備ができました。ここまでは、GWT のホスト・モードを使って GWT のアーティスト・ページをテストしてきました。今回もホスト・モードで起動できますが、新しいページをテストするためには GWT の Web モードに切り替える必要があります。なぜでしょう。XForms は、GWT のホスト・モードには存在しない、ブラウザーのプラグインに依存するからです。図 4 は Web モードへの切り替え方法を示しています。

※訳注: 上記パラグラフで最初に出てくる GWT's hosted dode は、GWT's hosted mode と解釈して訳しています。


図 4. Web モードに切り替える

Compile/Browse をクリックすると、このアプリケーションが Web モードで表示されます (図 5)。


図 5. Web モードでのアプリケーション

このアプリケーションが、皆さんがデフォルトで使っている Web ブラウザーで実行されている様子がわかるはずです。アーティストの 1 人をクリックすると、図 6 に示すインターフェースが表示されるはずです。


図 6. Artist ページをテストする

このページは、そのアーティストのアルバムのリストを表示します。このページは、いくつかの単純な XForms コントロールを使って、モデルのインスタンス・データの XML データに対して繰り返しの処理を実行します。第 3 回では、データ入力用の XForms コントロールを追加して、それを GWT の Ajax から呼び出せるようにし、レコード会社の幹部がこのページに新しいアルバムを追加できるようにする方法について説明します。


まとめ

この記事では、ロック・スターのシリーズの第 2 回として、GWT を使って対話型のページを作成する方法と、このページを XForms を使うページにリンクする方法について見てきました。第 3 回では、今回の記事で作成したロック・スターのアプリケーションをリファクタリングします。実際には今回作成したアプリケーションの機能を変更するわけではありませんが、同じページで GWT 要素を XForms 要素として使うことで、アプリケーションの対話動作をさらに優れたものにする方法を学びます。



ダウンロード

内容ファイル名サイズダウンロード形式
Part 2 sample coderockstar2_src.zip12KBHTTP

ダウンロード形式について


参考文献

学ぶために

製品や技術を入手するために

  • GWT の情報を入手するためには、そのソースである Google Web Toolkit の正式サイトに直接行くのが一番です。

  • Mozilla や Firefox、あるいは Seamonkey 用の XForms 拡張を入手してください。

議論するために

著者について

Michael Galpin は、1998年以来、プロとして Java ソフトウェアを開発してきています。彼は現在、カリフォルニア州のマウンテンビューにある、起業したばかりの会社、Ludi Labs に勤務しています。彼は California Institute of Technology で数学の学位を取得しています。

不正使用の報告のヘルプ

不正使用の報告

ありがとうございます。 このエントリーは、モデレーターの注目フラグが設定されました。


不正使用の報告のヘルプ

不正使用の報告

不正使用の報告の送信に失敗しました。


developerWorks: サイン・イン


IBM ID が必要ですか?
IBM IDをお忘れですか?


パスワードをお忘れですか?
パスワードの変更

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 利用条件

 


お客様が developerWorks に初めてサインインすると、プロフィールが作成されます。 プロフィールで選択した情報は公開されますが、いつでもその情報を編集できます。 お客様の姓名(非表示設定にしていない限り)とディスプレイ・ネームは、投稿するコンテンツと一緒に表示されます。

表示名をお選びください

developerWorks に初めてサインインするとプロフィールが作成されますので、その際にディスプレイ・ネームを選択する必要があります。ディスプレイ・ネームは、お客様が developerWorks に投稿するコンテンツと一緒に表示されます。

ディスプレイ・ネームは、3文字から31文字の範囲で指定し、かつ developerWorks コミュニティーでユニークである必要があります。また、プライバシー上の理由でお客様の電子メール・アドレスは使用しないでください。

(半角英数字で3文字以上31文字以下にする必要があります)


「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 利用条件

 


この記事を評価する

コメント

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=60
Zone=XML, Java technology
ArticleID=263889
ArticleTitle=XForms を Google Web Toolkit と統合する、第 2 回: アーティストとアルバムの管理フォームを作成する
publish-date=09252007
author1-email=mike.sr@gmail.com
author1-email-cc=ruterbo@us.ibm.com

タグ

Help
このタグで、My developerWorks のすべてのタイプのコンテンツを見つけるために検索フィールドを使用します。

スライダーバーを使用することで、より多く(少なく)タグを表示します。

人気のタグは、この特定のコンテンツ・ゾーン(例えば、Java テクノロジー、Linux や WebSphere など)に対するトップのタグを表示します。

マイ・タグは、この特定のコンテンツ・ゾーン(例えば、Java テクノロジー、Linux や WebSphere など)に対するお客様ご自身のタグを表示します。

このタグで、My developerWorks のすべてのタイプのコンテンツを見つけるために検索フィールドを使用します。人気のタグは、この特定のコンテンツ・ゾーン(例えば、Java テクノロジー、Linux や WebSphere など)に対するトップのタグを表示します。マイ・タグは、この特定のコンテンツ・ゾーン(例えば、Java テクノロジー、Linux や WebSphere など)に対するお客様ご自身のタグを表示します。