読者です 読者をやめる 読者になる 読者になる

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で、自身をスコープに突っ込むことにより、リダイレクトでもエラーメッセージが引き継がれます。


以上