はじめに
前回、Ahache Clickの基本的な使い方について説明しました。今回は、Webアプリケーションを作成する上で知っておきたいさまざまな機能について、いくつかピックアップして紹介していくことにしましょう。
Webアプリケーションを作成するとき、何よりもまず必要となってくるのは「入力された値のチェック(バリデーション)」「ページ遷移」「エラー処理」といったものでしょう。それらについて順に説明していきます。
対象読者
- Javaで手ごろなフレームワークを探している技術者。
- 最近のフレームワークをごくざっと理解しておきたい方。
- Web開発の手法がどうも気に入らない、と常々考えているJavaプログラマ。
バリデート機能付フィールドを使う
まずは、値のチェックからです。多くのWebアプリケーション関係のフレームワークでは「バリデーション」と呼ばれる値のチェック機能を備えています。Apache Clickの場合、各種の値を入力するためのコントロールが用意されており、それらを組み込むことで処理を行うようになっています。一例として、「整数を入力するためのフィールド」を使った簡単なサンプルをあげましょう。
package jp.codezine.click;
import org.apache.click.Page;
import org.apache.click.control.*;
import org.apache.click.extras.control.*;
public class HeloPage extends Page {
public String msg = "整数を入力ください。";
public Form form;
private IntegerField field;
private Submit submit;
public HeloPage(){
form = new Form("form");
field = new IntegerField("input","入力:");
field.setRequired(true);
field.setMinValue(0);
field.setMaxValue(100);
form.add(field);
submit = new Submit("submit", "送信");
form.add(submit);
}
@Override
public void onPost(){
if(form.isValid()){
int n = field.getInteger();
int total = 0;
for(int i = 0;i <= n;i++)
total += i;
msg = "合計:" + total;
}
}
}
テンプレート側には、メッセージを表示する$msgと、フォームを表示する$formを埋め込んでおきます。このサンプルは、0~100までの整数を入力して送信すると、ゼロからその数までの総和を計算して表示するサンプルです。それ以外の値を入力して送信してみてください。エラーメッセージが表示され、その他の表示も初期状態に戻されます。
IntegerField利用とバリデーションの処理
では処理を見てみましょう。IntegerFieldは、org.apache.click.extras.controlというパッケージに用意されています。これは、「click-extras-xxx.jar」というファイルに用意されている拡張機能です。
まずは、IntegerFieldを作成し組み込んでいる部分から。IntegerFieldでは、入力される値に関するいくつかのメソッドが用意されています。
field = new IntegerField("input","入力:");
field.setRequired(true);
field.setMinValue(0);
field.setMaxValue(100);
インスタンス作成した後、「必須項目か否か」「最小値」「最大値」といったものを設定しています。必須項目かどうかは、前回使ってみました。new IntegerFieldする際に引数で指定することもできますが、このようにメソッドで設定することもできます。また最小値・最大値はIntegerFieldに用意されている(正確には、そのスーパークラスであるNumberField)メソッドで、これにより入力可能な値の範囲を設定することができます。
作成されたIntegerFieldの入力チェックは、onPostで行っています。ここでは最初にformの「isValid」というメソッドをチェックしています。これは、入力された値をチェックした結果を示すもので、trueであればすべての値が正しい形式で入力されていることを示します。fieldではなくformのisValidを呼び出している点に注目してください。fieldにもisValidは用意されています。個々のコントロールごとにisValidでチェックをすることも可能ですが、formのisValidを使えば、そのフォームにaddされているすべてのコントロールをチェックし、すべてのisValidがtrueであるか知ることができます。
isValidがtrueであれば、後は入力された値を取り出して計算し結果を表示するだけです。IntegerFieldには「getInteger」というメソッドがあり、これで入力された値をint値として取り出すことができます(もちろん、getValueでStringとして取り出すこともできます)。
見れば分かるように、入力された値が正しい形式で書かれているか、実際にチェックする処理はありません。isValidはバリデーションの結果をチェックしているだけです。入力された値のバリデーション処理は、Apache Clickが行ってくれるため、プログラマが自分で処理を呼び出したりする必要はありません。
