SHOEISHA iD

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

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

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

Javaで軽快に使える「軽量フレームワーク」特集
~Apache Wicketで簡単Webアプリ作成(2)

第2回

  • X ポスト
  • このエントリーをはてなブックマークに追加

OtherPageテンプレートの作成

 では、このLinkのsetResponsePageで表示を変更する「OtherPage.class」を作成してみましょう。まずはテンプレートからです。OtherPage.htmlというファイルを作成し、次のように記述します。

<?xml version="1.0" encoding="UTF-8"?>
<html
    xmlns="http://www.w3.org/1999/xhtml"
    xmlns:wicket="http://wicket.apache.org/">
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <title>Other Page</title>
        <style type="text/css">
        h1 {
            background-color: #CCAAFF;
            border-style: none none solid solid;
            border-width: 0px 0px 2px 5px;
            padding: 1px 5px 1px 5px;
            font-size: 14pt;
        }
        #msg { text-color: #0000FF; }
        </style>
    </head>
    <body>
        <h1 wicket:id="title">Wicket Sample 2</h1>
        <div wicket:id="msg"></div>
        <br /><br />
        <p>※これは、Ajaxでアプリケーションのメッセージを表示する例です。</p>
        <div><a wicket:id="updatelink" href="javascript:void(0);">UPDATE</a></div>
    </body>
</html>

 ここでは、<div wicket:id="msg">というタグを用意し、必要に応じてここにメッセージを表示させます。また、<a wicket:id="updatelink">というタグを用意しておきますが、これはAjaxを利用して処理を呼び出すのに用います。

OtherPageクラスの作成

 続いて、OtherPageクラスです。OtherPage.javaというファイルを用意し、次のようにソースコードを記述します。

package jp.tuyano;

import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.ajax.markup.html.*;
import org.apache.wicket.markup.html.WebPage;
import org.apache.wicket.markup.html.basic.*;
import org.apache.wicket.model.Model;

public class OtherPage extends WebPage {
    private Model<String> msgModel;
    
    public OtherPage(){
        Label title = new Label("title","別のページ");
        this.add(title);
        msgModel = new Model<String>("initial...");
        final Label msg = new Label("msg",msgModel);
        msg.setOutputMarkupId(true);
        this.add(msg);
        AjaxLink<String> link = new AjaxLink<String>("updatelink"){
            private static final long serialVersionUID = 1L;

            @Override
            public void onClick(AjaxRequestTarget target) {
                updateMsg();
                if (target != null){
                    target.addComponent(msg);
                }
            }
        };
        this.add(link);
        updateMsg();
    }
    
    public void updateMsg(){
        WicSample app = (WicSample)this.getApplication();
        msgModel.setObject(app.getApp_msg());
    }
}

 完成したらプロジェクトを実行し、メインページとなるIndexPageに用意したリンクをクリックしてみましょう。OtherPageに表示が変わります。ここでは、アプリケーションクラスにAjaxを使ってアクセスし、その結果を表示するようになっています。OtherPageに用意したリンクをクリックしてみましょう。アプリケーションクラスに保管されているメッセージが表示されます。アプリケーションに保管されているメッセージは、最後に投稿した内容を示すもので、"[ 投稿された日時 ] 投稿メッセージ"というような形式で表示されます。

別のページにアクセスすると、最後に送信したメッセージの内容が表示される。UPDATEリンクをクリックすると、Ajaxでサーバにアクセスし表示を更新する。
別のページにアクセスすると、最後に送信したメッセージの内容が表示される。UPDATEリンクをクリックすると、Ajaxでサーバにアクセスし表示を更新する。

AjaxLinkの利用

 ここでは、リンクに「AjaxLink」というコンポーネントを利用しています。これは先ほどのLinkコンポーネントと同じようなものですが、Ajaxによる非同期通信でサーバに接続し処理を行わせるという点が異なります。これは、Linkと同様に、new AjaxLinkでインスタンスを生成し、onClickでクリック時の処理を実装します。使い方そのものはLinkとまったく同じです。

 違いは、onClickメソッドに「AjaxRequestTarget」というものが渡される、という点です。これは、非同期通信完了後の処理などを管理するものです。ここでは、まずupdateMsgメソッドを呼び出してアプリケーションクラスからapp_msgの値を取り出してmsgModelに設定し、それからmsgコンポーネントをaddします。このように、AjaxRequestTargetにコンポーネントをaddすることで、その表示を更新させることができるのです。

まとめ

 今回は、実際に簡単なアプリケーションを作成し、Wicketに用意されているさまざまな機能についてその利用例を説明しました。ある程度まとまったプログラムを作ってみると、Wicketの特徴が次第に見えてきます。

 まず、モデルによるフォームの値の扱いと、ページ遷移に関する考え方(テンプレートとWebPageクラスが変わるだけという点)に慣れましょう。バリデーションやページネーションなどの機能は使い方に悩むということはあまりないはずです。基本的となる部分での概念の違いを乗り越えることさえできれば、Wicketを使いこなすのはそれほど難しくありません。

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

  • X ポスト
  • このエントリーをはてなブックマークに追加
Javaで軽快に使える「軽量フレームワーク」特集連載記事一覧

もっと読む

この記事の著者

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

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

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

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

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/4460 2009/10/29 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

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

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

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

メールバックナンバー

アクセスランキング

アクセスランキング