[Seasar-user:13070] Re: [SAStruts]@Execute のinput属性で遷移できないケースがある

出羽 健一 [E-MAIL ADDRESS DELETED]
2008年 2月 26日 (火) 11:45:11 JST


ひがさま

出羽です。

Executeアノテーションのinput属性でedit/{id}のような
パラメータの指定をできるように対応して頂き、
ありがとうございます。
動作確認しましたが、バッチリでした。


> エラーのメッセージがリクエストに設定されているかで、
> 条件分岐しても良いけど、それだったら、素直にbackToEdit()に
> 遷移したほうがよさげ。

なるほど。ポストバックとかの仕組みを考えていましたが、
難しく考えていました。エラーのメッセージがリクエストに
設定されているかどうかを判定する方がお手軽ですね。

ちなみに、バリデーションエラーの有無を手軽に判定できる
ユーティリィティのようなものはFWとして提供されてあったりするのでしょうか。
ひとまずは、以下のような感じで自作したので問題ないのですが、
FW側で提供されているのであれば、ぜひ、そちらを使いたいです。

    public static boolean isError() {
        HttpServletRequest request = RequestUtil.getRequest();
        Object errorMessage = request.getAttribute(Globals.ERROR_KEY);        
        return errorMessage != null ? true : false; 
    }

あと、backToEdit()に遷移させる件ですが、この方式だと、
画面初期化用メソッドとbackToEditメソッドで重複した処理が
発生しやすく、それを抽出してメソッド化するタスクが必要に
なってしまいます。このタスクを怠るとバグの温床になってしまうので、
この方式は直感的に分かり易くてとっつきやすいのですが、
個人的には避けたいなぁと考えています。


> -----Original Message-----
> From: [E-MAIL ADDRESS DELETED]
> [mailto:[E-MAIL ADDRESS DELETED]] On Behalf Of Yasuo Higa
> Sent: Monday, February 25, 2008 7:37 PM
> To: [E-MAIL ADDRESS DELETED]
> Subject: [Seasar-user:13056] Re: [SAStruts]@Execute のinput属性で遷移でき
> ないケースがある
> 
> ひがです。
> >
> > 出羽です。
> >
> > > もうちょっと具体例がないと良くわかりません。
> >
> > 失礼しました。具体例を使って説明させていただきます。
> >
> >
> > 以下は、SASturtsチュートリアルのEmployeeActionクラスを
> > 一部抜粋したコードです。
> >
> >     @Execute(validator = false, urlPattern = "edit/{id}")
> >     public String edit() {
> >         Employee emp = jdbcManager
> >             .from(Employee.class)
> >             .id(id)
> >             .getSingleResult();
> >         Beans.copy(emp, this).execute();
> >         deptItems = jdbcManager
> >             .from(Department.class)
> >             .orderBy("id")
> >             .getResultList();
> >         return "edit.jsp";
> >     }
> >
> >
> >     @Execute(input = "backToEdit")
> >     public String confirm() {
> >         return "confirm.jsp";
> >     }
> >
> >
> > 現状ではedit.jsp でデータ入力後、confirmメソッドに対して
> > サブミットする際にバリデーションエラーになれば、
> > "backToEdit" に遷移するように指定されています。
> >
> > これをバリデーションエラー時に backToEdit ではなく、
> > edit実行メソッドに遷移させたいのです。しかしながら、
> > edit実行メソッドには"edit/{id}"のurlPattern が指定されているのですが、
> > confirm実行メソッドの@Executeのinput属性に"edit/{id}" という値を
> > 指定できないからなのか、遷移できないという訳です。
> >
> 対応しました。
> https://www.seasar.org/issues/browse/SASTRUTS-26
> 
> ただし、上記の例で、nameの項目を入力せずにサブミットすると
> edit()に遷移しますが、nameプロパティがnameカラムの値で
> 上書きされて、入力値(空白)が元(nameカラムの値)に
> 戻ってしまいますね。
> 
> エラーのメッセージがリクエストに設定されているかで、
> 条件分岐しても良いけど、それだったら、素直にbackToEdit()に
> 遷移したほうがよさげ。
> _______________________________________________
> Seasar-user mailing list
> [E-MAIL ADDRESS DELETED]
> https://ml.seasar.org/mailman/listinfo/seasar-user


Seasar-user メーリングリストの案内