アンケートご協力のお願いgihyo.jpでは,2010年度に向けて豪華プレゼントが当たる読者属性アンケートを実施しております。ご協力ください。

gihyo.jp » DEVELOPER STAGE » 特集 » Wicketで始めるオブジェクト指向ウェブ開発 » 第2回 コンポーネントとモデル

Wicketで始めるオブジェクト指向ウェブ開発

第2回 コンポーネントとモデル

今回は,Wicketのオブジェクト指向によるWeb開発を支える基盤である「コンポーネント」と「モデル」の関係について紹介します。

ページはコンポーネントの固まり

Wicketのウェブページは「コンポーネント」の固まりです。コンポーネントとはユーザへの表示とユーザからの入力を受け付けるオブジェクトです。すべてのコンポーネントはComponentのサブクラスとして作られています。ウェブページ自身を表すPageクラスすらも,Componentのサブクラスです。

Wicketのページは,Pageという一番親となるコンポーネントの上に,さまざまなコンポーネントが載せられたような構造になっています。この構造は,デスクトップ・アプリケーションにおいて,ボタンやフィールドなどのコンポーネントがウインドウという親コンポーネントに載せられているのと同じ考え方です。

HTML要素=コンポーネント

Wicketでは,ほぼすべてのHTMLは対応するWicketコンポーネントによって制御できます。<input type="text">であれば,WicketのTextFieldコンポーネントを要素に適用することで,タグの表示や入出力をプログラムからコントロールできます。

<form>はFormコンポーネントによって,<input type="button">や<button>,<a>などはLinkコンポーネントによって,ただのタグを「オブジェクト」にすることができます。コンポーネントの属性を変えるということは,ブラウザに出力されるタグをコントロールすることと同じです。Wicketは,HTMLタグにコンポーネントを適用することによって,静的なHTMLを動的なオブジェクトとして扱うのです。

コンポーネントはタグの表示をコントロールする

コンポーネントはHTML要素を制御するものですから,コンポーネントを操作することで,HTMLの生成をコントロールすることができます。逆に言えば,HTMLの表示を制御したいのであれば,その場所にコンポーネントを適用すればよいのです。

非常にシンプルな例が,前回作成したQuickstartアプリケーションで使われています。Labelコンポーネントです。

Labelコンポーネントによる表示のコントロール

HTML要素にコンポーネントを適用する

第1回で作成したquickstartアプリケーションに「HomePage.html」と「HomePage.java」の2ファイルがありました。HomePage.htmlを制御しているプログラムが,HomePage.javaです。先にHTMLファイルを見てみましょう。次のようなシンプルなものです。

リスト1 HomePage.htmlの内容

<html xmlns:wicket="http://wicket.apache.org/dtds.data/wicket-xhtml1.4-strict.dtd" >
    <head>  
        <title>Wicket Quickstart Archetype Homepage</title>
    </head>
    <body>
        <strong>Wicket Quickstart Archetype Homepage</strong>
        <br/><br/>
        <span wicket:id="message">message will be here</span>
    </body>
</html>

強調表示の部分にある「message will be here」という文字は,実際にブラウザで表示したときには「If you see this message wicket is properly configured and running」に変わっていました(※1)。プログラムから,この部分が変更されたわけです。

WicketのコンポーネントはHTML要素を制御すると説明しました。今回は,どの要素が制御されているのでしょうか。

それは,メッセージが含まれている<span>タグです。コンポーネントによって<span>タグを制御して,表示を変えたのです。

強調している行には「wicket:id="message"」という属性が付けられています。この「wicket:id」属性が,要素をコンポーネントによってプログラム制御する,というWicketに対する指定になります。

では,要素にコンポーネントを適用するコードを見てみましょう。

リスト2 HomePageクラスのコンストラクタ

public HomePage(final PageParameters parameters) {

  // Add the simplest type of label
  add(new Label("message", "If you see this message wicket is properly configured and running"));

// TODO Add your page's components here
}

Wicketでは,ページの構築はWebPageのサブクラスを作成することで行います。HomePageクラスもWebPageクラスのサブクラスです。HomePageクラスのコンストラクタ内でHTML要素へのコンポーネント適用が行われています。

Wicketのコンポーネントは,第1引数に常にIDを受け取ります。このIDが,HTML上に指定したwicket:idと対応します。ここでは第1引数に「message」を指定しています。HTMLファイル内でwicket:id="message"と指定された<span>タグに,Labelコンポーネントを適用しているのです。

Labelコンポーネントの役割は,適用したHTML要素のボディ部分をプログラムから書き換えることです。一番シンプルな方法は,Labelの第2引数に文字列を指定することです。前述のソースコードでは,第2引数に,まさしくブラウザ上で見たあの文字が指定されています。

コンポーネントにはそれぞれ役割があります。その役割に応じて引数も異なっています。各コンポーネントの使い方を押さえることが,Wicketを使いこなす早道となります。

※1
前回作成したwicket-sampleフォルダ内でmvn jetty:runと入力することで,再度確認できます。

著者プロフィール

矢野勉(やのつとむ)

フリーランスのプログラマ。Wicket-ja主催。

ウェブ・アプリケーションの開発を中心にさまざまな案件に関わってきました。現在はWicketによる開発を支援しています。

URLhttp://d.hatena.ne.jp/t_yano/

著書

  • オープンソース徹底活用 WicketによるWebアプリケーション開発

    オープンソース徹底活用 WicketによるWebアプリケーション開発(秀和システム)

コメント

コメントの記入

パスサポ

多数の情報処理技術者試験対策書籍の発行実績を誇る技術評論社がお届けする,資格試験合格サイト「めざせ! 情報処理試験 パスサポ」が開設されました。

ピックアップ

サクセスストーリーに続く,快適サーバー運用管理のヒント!

データの増大,煩雑な管理,システムダウン,セキュリティなど,迫りくる課題からシステム管理者の負担を軽くするポイントを解説します。

gihyo.jp インフラエンジニア情報局

ネットワークやITにかかわるあらゆる業種で必要とされるインフラエンジニアに向けた技術情報や心構え,その魅力について多角的に紹介。

テストエンジニア ステーション

いま,ITに関わるあらゆる開発業務で注目されつつあるテスト系エンジニアをターゲットにしたコンテンツサイトを展開します。

一行クイックアンケート

gihyo.jpで取り上げてほしいネタは?

※検索はページ右上の検索ボックスをご利用ください。

その他の連載

キーパーソンが見るWeb業界

本連載はWeb Site Expert/gihyo.jpとの連動企画です。阿部淳也, 長谷川敦士, 森田雄のお三方による,Web業界をテーマにした座談会です。

きたみりゅうじの聞かせて珍プレー

ソフトウェア開発の現場で体験したトホホな失敗,思わずうなる珍プレーをきたみりゅうじ氏が四コママンガで紹介。みなさんからの投稿もお待ちしてます!

ActionScript 3.0で始めるオブジェクト指向スクリプティング

野中文雄氏が,簡単なスクリプトは書いたことがあるという初級者を対象に,ActionScript 3.0の基本からクラス定義までを解説します。

まだ間に合う「ITパスポート」受験対策 原山先生の短期合格塾

この連載では,4月18日のITパスポート試験の受験に向けて,短い期間で効率良く受験対策を行う方法や,確実に得点するための裏ワザなどを伝授していきます。

Ubuntu Weekly Recipe

Ubuntuの強力なデスクトップ機能を活用するための,いろいろなレシピをお届けします。

C/C++プログラマのためのDTrace入門

よくカーネルのチューニングや解析で活用されるDTraceですが,実はユーザプログラムの開発においても非常に有用です。連載ではC/C++プログラマやテストに関わる方向けにDTraceの使い方を解説します。

Blogopolisから学ぶ計算幾何

計算幾何学は,図形に関するアルゴリズムを研究するコンピュータサイエンスの一分野です。本連載では,ビジュアルブログ検索エンジン「Blogopolis」で採用されている計算幾何のアプローチを例に取り上げながら,計算幾何の初歩を実践的に学習します。

検索エンジンはいかにして動くのか?

本連載では, 今や誰もが利用している検索エンジンの中身を,全体の仕組みやデータ構造,アルゴリズムから分散インデックスまで,最近の研究事例も交えて紹介します。

連載一覧

gihyo.jp

  • DEVELOPER STAGE
  • ADMINISTRATOR STAGE
  • WEB+DESIGN STAGE
  • LIFESTYLE STAGE
  • SCIENCE STAGE
  • NEWS & REPORT

書籍案内

  • 新刊書籍
  • 書籍ジャンル一覧
  • 書籍シリーズ一覧
  • 新刊ピックアップ
  • ロングセラー
  • 電脳会議

定期刊行物一覧

  • Software Design
  • WEB+DB PRESS
  • Web Site Expert
  • 組込みプレス