doXxx()メソッドでバリデーションを行わないようにするには?
例えば画面に更新ボタンとキャンセルボタンを設置します。キャンセルボタンを押してバリデーションを行わずに画面遷移をする場合はキャンセルボタンのidにjumpXxxとします。しかし遷移先が動的である場合はjumpXxxを使用する事は出来ません。doXxxメソッドを呼び出し、かつバリデーションを行わないよう処理する必要があります。ですがTeedaにはdoXxxメソッドでバリデーションを行わないよう処理を記述する事が出来ません(私が知らないだけかも・・)。そこで発想を逆に考え更新ボタンを押した場合に動的なバリデーションを行うようにし、キャンセルボタン押下時はバリデーションを行わないようにします。
public class AxxPage { public String text1; public Class initialize() { return null; } public Class prerender() { return null; } public String doUpdate() { return goPage(); } public String doCancel() { return goPage(); } private String goPage() { String page = "hoge"; if (...) { page = "hogehoge"; } return page; } public Validator getText1Validator() { TRequiredValidator validator = new TRequiredValidator(); validator.setTarget("doUpdate"); return validator; } }
動的なバリデーションgetText1Validator()を定義します。今回は必須入力を設定します。必須入力にはTRequiredValidatorを使用します。TRequiredValidatorにはsetTarget()メソッドが定義されており引数にバリデーションを行うメソッドを指定します。ここではdoUpdate()メソッドをターゲットとします。最後にメソッドの返り値にTRequiredValidatorを指定します。
追記:
もっと良い書き方があればコメントお願いします <(_ _)>。@Requiredを無効にする書き方があるような気がしてきた...。
追記2:
動的なバリデーションを書かなくても@Required(target="doUpdate")とターゲット指定が出来るのがわかった。もっとちゃんとソース見ようよ・・。