コントロールのイベント処理について
続いて、複数の送信ボタンや複数のフォームなどがある場合の処理について考えてみましょう。ここまでは、すべて「Webページに1つのフォームがあり、送信ボタンが1つあるだけ」というシンプルなものでした。が、送信処理がページ内に複数あるような場合には、「onPostで受け取って処理するだけ」といったやり方では困ります。何が送信されたかに応じた対応を考えないといけません。
このような場合には、送信ボタンごとに実行する処理を設定することができます。簡単な例をあげましょう。ここでは「送信」「キャンセル」の2つのボタンを用意します。送信ではそのままフォームが送信され処理が行われますが、キャンセルでは初期状態に表示が戻されます。
public class HeloPage extends Page {
public String msg = "整数を入力ください。";
public Form form;
private IntegerField field;
private Submit submit,cancel;
public HeloPage(){
form = new Form("form");
field = new IntegerField("input","入力:");
field.setValue("0");
field.setRequired(true);
field.setMinValue(0);
field.setMaxValue(100);
form.add(field);
submit = new Submit("submit","送信",this,"submit");
form.add(submit);
cancel = new Submit("cancel","キャンセル",this,"cancel");
form.add(cancel);
}
public boolean submit(){
if(form.isValid()){
int n = field.getInteger();
int total = 0;
for(int i = 0;i <= n;i++)
total += i;
msg = "合計:" + total;
}
return true;
}
public boolean cancel(){
field.setValue("0");
field.setError(null);
return true;
}
}
イベントの割付とコールバックメソッド
では、ソースコードを見てみましょう。ここでは2つのSubmitを用意し、それぞれに異なる処理を用意しています。そのポイントは、Submitインスタンスを作成する部分にあります。
submit = new Submit("submit","送信",this,"submit");
cancel = new Submit("cancel","キャンセル",this,"cancel");
このように、全部で4つの引数が渡されていますね。ここで、イベントの処理の設定がされています。第3引数にはイベントのリスナーとなるインスタンス、第4引数には呼び出されるメソッド名を指定します。例えば、new Submit("submit","送信",this,"submit")であれば、この[送信]ボタンが押されて送信されると、this(このPageインスタンス自身)にあるsubmitメソッドが呼び出されるようになる、ということになります。

