コントロールのイベント処理について
続いて、複数の送信ボタンや複数のフォームなどがある場合の処理について考えてみましょう。ここまでは、すべて「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メソッドが呼び出されるようになる、ということになります。