API リファレンス
ダウンロード
- RSSの取り出しに失敗しました:http://sourceforge.jp/projects/paraselene/releases/rss
入力チェックを実装します。まず、init に以下のコードを書き加えます。
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15:
public void init(){ super.init(); // モックアップHTMLの内容と異なる内容で初期化したい場合は // super.init()の後に変更用の処理を記述して下さい。 // このメソッドは上記コンストラクタの中から呼ばれます。 // インスタンス発生はバックグラウンドで非同期に処理していますので // HTTPリクエスト発生よりずっと過去に初期化されます。 // このため、ユーザーのトランザクションに応じた条件分岐を設けても // 意図した振る舞いになりません。 getErrorFont().setVisible( false ); getUserIdInput().setTitle( "ユーザーID" ); getNameInput().setTitle( "名前" ); getAddressInput().setTitle( "住所" ); }
次にinputMainにチェックルーチンを入れます。
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36:
public Forward inputMain( RequestParameter req, Forward fw ) throws PageException { // fwにはモックアップと同じ遷移先が設定されています。 // 別の遷移先としたい場合は、新しくForwardインスタンスを生成して // リターンして下さい。 if ( getOkInput().isClicked() ) { try { Control.checkNull( "が未入力です。", getUserIdInput(), getNameInput(), getAddressInput() ); Control.checkPattern( "は半角英数字にして下さい。", Control.CharGroup.ALNUM, getUserIdInput() ); String sex = CheckBox.getRadio( getSexTags() ); if ( sex == null ) { throw new ControlException( "性別を指定して下さい。", (Control)null ); } } catch( ControlException ce ) { Control ctl = ce.getControl(); String mes = ""; if ( ctl != null ) { mes = ctl.getTitle(); } getErrorFont().setValueString( mes + ce.getMessage() ); getErrorFont().setVisible( true ); fw = new Forward( PageType.USER_EDIT_HTML, true, false ); } } return fw; }
キャッチ節の中で、エラーメッセージの表示を行っています。
ControlException には、文章とエラー要因となったコントロールを持たせる事が可能です。
Cotorol のエラーチェックメソッドは、渡された文字列とエラーチェックに違反したコントロールを例外に持たせてスローします。
init で各コントロールにタイトルを持たせていますが、このように利用します。
続いて、エラーチェックをクリアしたら、データ更新を実施します。
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52:
public Forward inputMain( RequestParameter req, Forward fw ) throws PageException { // fwにはモックアップと同じ遷移先が設定されています。 // 別の遷移先としたい場合は、新しくForwardインスタンスを生成して // リターンして下さい。 if ( getOkInput().isClicked() ) { try { Control.checkNull( "が未入力です。", getUserIdInput(), getNameInput(), getAddressInput() ); Control.checkPattern( "は半角英数字にして下さい。", Control.CharGroup.ALNUM, getUserIdInput() ); String sex = CheckBox.getRadio( getSexTags() ); if ( sex == null ) { throw new ControlException( "性別を指定して下さい。", (Control)null ); } User user = getEditUser( (SeekHtml)req.getHistory().getPage( PageType.USER_SEEK_HTML ) ); String id = getUserIdInput().getValueString(); String name = getNameInput().getValueString(); String addr = getAddressInput().getValueString(); if ( user == null ) { user = new User( id, name, sex, addr ); User.db.add( user ); } else { user.name = name; user.sex = sex; user.address = addr; } } catch( ControlException ce ) { Control ctl = ce.getControl(); String mes = ""; if ( ctl != null ) { mes = ctl.getTitle(); } getErrorFont().setValueString( mes + ce.getMessage() ); getErrorFont().setVisible( true ); fw = new Forward( PageType.USER_EDIT_HTML, true, false ); } } return fw; }
以上でこのサイトの実装は全て済みました。
GateやDummyPageへの追記は割愛しています。
そういった意味では、まだまだ改善の余地があります。