SHOEISHA iD

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

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

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

Javaで軽快に使える「軽量フレームワーク」特集
低い学習コストを重視した「Apache Click」 (2)

第5回


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

フォームを使わないアクション

 では、フォームを使わないで何らかの操作を行う場合はどうするのでしょう。例えば、<a>タグによるリンクで何かを設定するような場合、フォームは利用しません。こうした場合も同様に扱えるのでしょうか。

 フォームを利用しないで何かを実行させるような場合には、Apache Clickに用意されている「ActionButton」「ActionLink」といったコントロールを用います。これらは、それぞれプッシュボタンとハイパーリンクを作成するためのもので、Submitと同様にイベント処理を組み込むことができます。実際にやってみましょう。まず、helo.htmのボディ部分を次のように修正しておきます。

<body>
    <h1>Hello Click!</h1>
    <p>$msg</p>
    <p>$link</p>
    <p>$button</p>
</body>

 そして、HeloPageクラスを修正します。今回はActionLinkとActionButtonをそれぞれ用意し、個々にイベント処理のメソッドを設定してみましょう。

public class HeloPage extends Page {
    public String msg = "ボタンをクリック。";
    private ActionLink link;
    private ActionButton button;

    @Override
    public void onInit(){
        link = new ActionLink("link","ハイパーリンク",this,"action1");
        this.addControl(link);
        button = new ActionButton("button","プッシュボタン",this,"action2");
        this.addControl(button);
    }
    
    public boolean action1(){
        msg = "ActionLinkをクリックしました。";
        return true;
    }
    public boolean action2(){
        msg = "ActionButtonをクリックしました。";
        return true;
    }
}
図7 リンクかボタンをクリックすると、メッセージが変更される。
図7 リンクかボタンをクリックすると、メッセージが変更される。

 表示されるリンクやボタンをクリックすると、メッセージが変化します。それぞれのコントロールの利用の仕方は、Submitの例とほとんど同じです。唯一異なるのは、フォームにaddせず、直接PageにaddControlしているという点だけです。

 直接addControlした場合、テンプレート側にそのコントロールを出力するように記述をしていないとページに表示されません。ここでは、$linkと$buttonがテンプレートに用意されており、ここでコントロールのタグが出力されています。

 また、ここではコントロール類をaddControlで組み込んでいますね。このように直接コントロールをPageに組み込む場合、ただpublicフィールドとして用意して表示させるだけだと、アクションがうまく機能しません。このようにaddControlで明示的に組み込む必要があるようです。

ページ遷移とデータの受け渡し

 続いて、ページの移動について考えてみましょう。Pageクラスには、フォワードやリダイレクトのために次のようなメソッドが用意されており、それらを呼び出すだけでページ移動することができます。

setForward( 移動先 )
setRedirect 移動先 )
setRedirect 移動先 , Map )

 引数には、移動先のページを指定します。これは、"helo.htm"というように名前で指定することもできますし、HeloPage.classというようにPageクラスを指定することもできます。

 非常に面白いのは、setRedirectでリダイレクトするときには、必要な値をMapとして受け渡すことができる、という点でしょう。実をいうと、このMapを渡す書き方は、ver. 2.1から新たにサポートとなったものです。このため、2.0.1では動かないのですが、非常に面白い機能ですのでここで紹介しておきましょう(2.0.1では、この後に説明するフォワードを使った方法を用いてください)。HeloPageクラスを次のように修正してください。

public class HeloPage extends Page {
    public String msg = "整数を入力ください。";
    publicForm form;
    private TextField input;
    private Submit submit;

    public HeloPage(){
        form = new Form("form");
        input = new TextField("input","入力");
        form.add(input);
        submit = new Submit("button","移動",this, "submit");
        form.add(submit);
    }
    
    public boolean submit(){
        msg = input.getValue();
        Map map = new HashMap();
        map.put("msg", msg);
        this.setRedirect(OtherPage.class,map);
        return true;
    }
}

 ここでは、送信されたらsetRedirectでOtherPage.classに移動するようにします(このクラスはこの後に作成します)。このとき、Mapインスタンスを第2引数に渡しています。このMapでは、input.getValueで送信されたテキストを取り出し、"msg"というキーで保管してあります。こうして渡したテキストを、リダイレクト先で利用しようというわけです。なお、helo.htmには、$formを出力してフォームを表示するよう修正をしておいてください。

次のページ
OtherPageの作成

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

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

もっと読む

この記事の著者

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

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

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

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

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/4556 2014/04/17 09:39

おすすめ

アクセスランキング

アクセスランキング

イベント

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

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

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

メールバックナンバー

アクセスランキング

アクセスランキング