こんにちは。まっつんです。今回はApache Wicket(以下、Wicket)のサンプルを参考に、Wicketで作るWebアプリケーションの構造を見ていきたいと思います。

Apache Mavenでビルドし、Apache Tomcatを起動して、http://localhost:8080/wicket-examples/ にアクセスします。このページではサンプルの一覧が表示されます。1.4-rc1では38のサンプルが用意されています。結構多いですね。サンプルの内容も ajax, signin, upload など、実践向きのものが数多くあります。

MATSUFUJI Hideharu

どのサンプルを参考にしようか迷っていると abacadabra というサンプルを見つけました。スペルミスかワザとなのかはわかりませんが、 abracadabra(アブラカタブラ) のことのようです。まじないのアブラカタブラですね。中を見てみると予想通りウィザードのサンプルがありました:-)

abacadabra にはウィザードのサンプルが三つ用意されているのですが、このうち wizard for creating a new user はまさにユーザ登録アプリケーションです。このサンプルから機能を削っていけば、いつものユーザ登録アプリケーションが完成しますが、自分の理解力を試すためにここでは見ないことにします。実装に困ったら、迷わず参考にしますが:-)

あまり複雑なサンプルを例にしても混乱してしまうだけなので、ここでは echo を参考にすることにします。echo はテキストに入力した文字列を表示する単純なサンプルです。

echo.png

Wicketではサンプルを動作させるとページ右上に Source code というリンクが表示され、サンプルのソースが簡単に参照できるようになっていて便利です。

sourcecode.png

echo には三つのファイルがあります。

  • EchoApplication.java
  • Echo.java
  • Echo.html

まずは EchoApplication.java から見てみましょう。

public class EchoApplication extends WicketExampleApplication
{
    public EchoApplication() {}

    @Override
    public Class<? extends Page> getHomePage()
    {
        return Echo.class;
    }
}

Wicketで作られるWebアプリケーションはこのApplicationオブジェクトによって定義されます。このオブジェクトでは設定とホームページ(ビュー)となるクラスを定義します。続いて、ホームページ(ビュー)として定義されている Echo クラスを見てみましょう。

public class Echo extends WicketExamplePage
{
    private String message = "[type your message to the world here]";

    public Echo()
    {
        PropertyModel<String> messageModel = new PropertyModel<String>(this, "message");

        add(new Label("msg", messageModel));

        Form<?> form = new Form("form");
        form.add(new TextField<String>("msgInput", messageModel));
        add(form);
    }

    public String getMessage()
    {
        return message;
    }

    public void setMessage(String message)
    {
        this.message = message;
    }
}

コンストラクタでモデルとフォームの定義を行っています。モデルの属性が message のみのためか、Echo クラスがモデルとビューの役割を兼任したクラスになっています。最後に Echo.htmlを見てみましょう。

<?xml version="1.0" encoding="UTF-8"?>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
    <title>Wicket Examples - echo</title>
    <link rel="stylesheet" type="text/css" href="style.css"/>
</head>
<body>
    <span wicket:id="mainNavigation"/>

    <form wicket:id="form">
        <input type="text" wicket:id="msgInput" value="" size="50" />
        <input type="submit" value="set message" />
    </form>
    <span wicket:id="msg" id="msg">Message goes here</span>

</body>
</html>

Echo クラスで定義されたモデルやフォームにアクセスして、フォームや入力された文字列の表示を行っています。スタティックなHTMLとほとんど変わりがないので、Webデザイナーも問題なく編集することができるのではないでしょうか。

今回はWicketで作られたWebアプリケーションを見てきたわけですが、KahuaSeasideと比べると無難にまとめられたフレームワークという感じがしました。先進的なフレームワークといえるKahuaSeaside(特にSeaside)とは異なり、Wicketは一般的に知られている技術を使った開発を支援するフレームワークと言えるでしょう。Wicketの公式サイトに開発の動機がいくつか記載されていますが、現存するフレームワークの問題点を解消することが主な動機のようです。先進的な技術を導入するフレームワーク、問題点を少しずつ改善することを目指すフレームワーク、どちら良い悪いという問題ではなく、それぞれに役割と意義があるのだと思います。

プロダクトを選定するのに重要なのは開発者やユーザの数だという話を耳にします。これらはプロダクトを選定する上で確かに重要な要素です。しかし、プロダクトの特徴が自分やプロジェクト、会社の技術的要求と合致しているかということの方がより重要な要素ではないでしょうか。「みんなが使っているから」という理由だけでプロダクトを採用するのは技術者として避けたいところです。

参考文献

トラックバック(0)
  • このブログ記事のトラックバックURL:
コメント