SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

Javaで軽快に使える「軽量フレームワーク」特集

Javaで軽快に使える「軽量フレームワーク」特集
~リッチなGUIを構築する「Vaadin」(3)

第12回

サーブレットからテキストを取得しPanelに表示

 では、前ページのサーブレットにアクセスしてテキストを取得し、Panelに表示させてみることにしましょう。MyvaadinApplicationクラスを次のように書き直してください(なお、ここではサーブレットのアドレスをアプリケーションと同階層の./dataにしてあります)。

package com.example.myvaadin;

import java.io.*;
import java.net.*;

import com.vaadin.Application;
import com.vaadin.ui.*;

public class MyvaadinApplication extends Application {
	Window mainWindow = null;

	@Override
	public void init() {
		Window mainWindow = new Window("Myvaadin Application");
		setMainWindow(mainWindow);
		VerticalLayout layout = (VerticalLayout) mainWindow.getContent();
		layout.setMargin(true);
		layout.setSpacing(true);
		Panel panel = new Panel("※これがパネルです。");
		panel.setWidth("300px");
		panel.setHeight("200px");
		VerticalLayout playout = (VerticalLayout) panel.getContent();
		playout.setMargin(true);
		playout.setSpacing(true);
		layout.addComponent(panel);
		String s = getData(this.getURL() + "/data");
		Label label = new Label(s, Label.CONTENT_XHTML);
		playout.addComponent(label);
	}
	
	String getData(String address){
		String data;
		data = "";
		BufferedReader breader = null;
		try {
			URL url = new URL(address);
			URLConnection con = url.openConnection();
			con.setDoInput(true);
			con.setDoOutput(false);
			InputStreamReader reader = new InputStreamReader(con.getInputStream());
			breader = new BufferedReader(reader);
			while(true){
				String s = breader.readLine();
				if (s == null) break;
				data += s;
			}
		} catch (MalformedURLException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			try {
				breader.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
		return data;
	}
}
サーブレットにアクセスしてデータを取得しPanelに表示をする
サーブレットにアクセスしてデータを取得しPanelに表示をする

 ここでは、getDataメソッドで、引数に指定したアドレスにアクセスをし、テキストを取得しています。URLインスタンスを作成し、そこからURLConnectionを取得、getInputStreamでストリームを用意してテキストを受け取っています。特にVaadinならではという処理はなく、ごく一般的なサーバーサイドでの処理であることが分かるでしょう。

テーブルの表示

 サーブレットにアクセスしてからテキストを取得する手法は、あまりスマートな方法とは言えません。では、Vaadinではサーバーサイドから必要なデータを取得するような仕組みは考えられていないのでしょうか。いいえ、単純なテキストデータなどの取得はあまり考えられていませんが、多量のデータを表示するためのコンポーネントなどでは、外部からデータを取得して表示するための仕組みがちゃんと備わっています。

 例として、「Table」コンポーネントを使ってみましょう。Tableは、テーブルを表示するためのコンポーネントです。これは次のような形でデータを表示します。

public void init() {
	Window mainWindow = new Window("Myvaadin Application");
	setMainWindow(mainWindow);
	VerticalLayout layout = (VerticalLayout) mainWindow.getContent();
	layout.setMargin(true);
	layout.setSpacing(true);
	Table table = new Table("※テーブル");
	table.addContainerProperty("地名",String.class,null);
	table.addContainerProperty("前期売上",Integer.class,null);
	table.addContainerProperty("後期売上",Integer.class,null);
	table.addItem(new Object[]{"東京",12300,45600},1);
	table.addItem(new Object[]{"大阪",9870,32100},2);
	table.addItem(new Object[]{"名古屋",4560,23400},3);
	table.setWidth("300px");
	table.setHeight("100px");
	layout.addComponent(table);
}
Tableの使用例。addItemで組み込んだデータを一覧表示する
Tableの使用例。addItemで組み込んだデータを一覧表示する

 Tableは、「addItem」で組み込んだデータを一覧表示します。addContainerPropertyで列データを追加し、それからaddItemで表示する行データをObject配列として追加していきます。作成されたテーブルは、ヘッダー部分をクリックしてデータをソートできたり、各列の幅をマウスでドラッグして調整するなど、基本的な機能は最初から備わっています。

 このTableのようなコンポーネントは、多量のデータを表示したり、必要に応じてダイナミックにサーバからデータを取得したりすることが多いものです。ソースコードにaddItemをずらっと書いて表示を作るという方法はあまりよくありません。もっとスマートにサーバからデータを取得する方法が必要です。

次のページ
モデルクラスの作成

この記事は参考になりましたか?

Javaで軽快に使える「軽量フレームワーク」特集連載記事一覧

もっと読む

この記事の著者

掌田 津耶乃(ショウダ ツヤノ)

三文ライター&三流プログラマ。主にビギナーに向けたプログラミング関連の執筆を中心に活動している。※現在、入門ドキュメントサイト「libro」、カード型学習サイト「CARD.tuyano.com」を公開...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/4943 2010/03/18 14:00

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー