Stripes Framework どうよ。
Java Web Framework である Stripes Framework を地味に使ってみています。EvernoteでStripes使ってるよー、みたいな記事がありましたが、日本ではマイナーで日本語の解説も少ない。。
Web Frameworkを使うにあたり、挙動が理解しづらかったりするのが、バリデーションです。struts classic でいうところのxmlのactionタグのinput属性で指定するように、エラー時の遷移を変更するには、どうしたら良いの? ということで試しました。
package action; import net.sourceforge.stripes.action.ActionBean; import net.sourceforge.stripes.action.ActionBeanContext; import net.sourceforge.stripes.action.DefaultHandler; import net.sourceforge.stripes.action.ForwardResolution; import net.sourceforge.stripes.action.RedirectResolution; import net.sourceforge.stripes.action.Resolution; import net.sourceforge.stripes.validation.Validate; import net.sourceforge.stripes.validation.ValidationErrorHandler; import net.sourceforge.stripes.validation.ValidationErrors; public class AddActionBean implements ActionBean, ValidationErrorHandler { @Validate(required=true) private Integer arg1; @Validate(required=true) private Integer arg2; private Integer result; @DefaultHandler public Resolution add() { result = arg1 + arg2; return new ForwardResolution("/add.jsp"); } @Override public Resolution handleValidationErrors(ValidationErrors errors) throws Exception { return new RedirectResolution(ErrorActionBean.class).flash(this); } // getter,setterは割愛 }
ValidationErrorHandlerインターフェースをimplementsしてhandleValidationErrorsメソッドを実装すれば、そこでバリデーションエラー時のハンドル、遷移先指定ができます。
それとフラッシュスコープというものがありまして、すぐ捨てられるセッションとでも言いますか、、
RedirectResolution#flashで、自身をスコープに突っ込むことにより、リダイレクトでもエラーメッセージが引き継がれます。
以上