[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 メーリングリストの案内