ボタンなどのイベントが起動したときに、イベントログをDBに吐くとか、特定の処理をしたいって時にどうするか。話の前提として(別に無くてもいいが)システム構築が後半にさしかかかり大概の機能は構築し終わった後に「大人の事情でこの仕組みを入れなくてはならない」とかになった場合。自分用メモ。
イベントの始めに何か特定の処理をしたい
★ Form#delegateSubmit(IFormSubmittingComponent) をオーバーライド
public HogePage extends WebPage { private Form _form = new Form("form"){ public void delegateSubmit(IFormSubmittingComponent comp){ // 共通的名処理、イベントログとか outEventLog(comp.getInputName()); // イベントの処理 super.deletegeSubmit(comp); <-- これ必須。 } } public HogePage(){ add(_form); _form(new Button("btn1"){ ... } ); _form(new Button("btn2"){ ... } ); _form(new Button("btn3"){ ... } ); } }
この場合、Formにadd( )されたbtn1,btn2,btn3のイベントが開始される**前**に処理を行えます。例えば、サービス時間が過ぎてたらイベントを起動しないチェックや、短時間に何度もクリックするおイタな人の場合、イベント処理を行わないで警告画面に飛ばすなど・・・
当然ですが、メソッド名の通り、Submit系のイベントには使えますが(ButtonとかSubmitLinkとか)LinkとかいったSubmitじゃない系のイベントには使えません。
、画面表示前に何か特定の処理をしたい
★ Page#onConfigure( )をオーバーライド
public class HogePage extends WebPage{ public HogePage(){ } public void onConfigure( ){ // 共通的名処理、イベントログとか outEventLog(...); super.onConfigure(); } }
先ほどのLinkなどのSubmitしない系のイベントもここで拾えます。
自分用メモなので、バッドノウハウなんて言わないでね。