[Seasar-user:12982] Re: [SAStruts] urlPattern の優先順位
Yasuo Higa
[E-MAIL ADDRESS DELETED]
2008年 2月 21日 (木) 14:16:05 JST
ひがです。
> 杉本です。
>
> SAStrutsの仕様の確認をさせてください。
>
> Actionに以下のようなメソッドがあるとします。
>
> @Execute(urlPattern="{xxId}", validator=false)
> public String index() {
> // そもそもurlPattern="{index/{xxId}"にすべき?
> ・・・画面を表示するための処理
> }
>
> @Execute(validator=false)
> public String showPage() {
> return index(); // urlPatternを使わずに画面を表示したいのでこんな感じに
> }
>
> @Execute(input="showPage")
> public String delete() {
> ・・・削除処理
> }
>
> POSTでdeleteメソッドが呼ばれて、入力検査にかかった場合ですが、
> 上記のコードだとうまく動作しません。
>
> showPageにフォワードしたくてもurlPatternの方が優先順位が高く、
> アクション名.do?xxId=showPage&SAStruts.method=indexに
> フォワードしてしまいます。
>
> 優先順位を@ExecuteにするとxxIdに文字列を許可した場合、@Executeが
> 付いたメソッド名をxxIdのパラメータ値に使えないので、正しい仕様だと思いますが、
>
> POSTではindex以外のメソッドが呼び出せるのに、URL直接アクセスや
> フォワードで表示しようとしたらindex以外のメソッドが呼び出せないで
> 少しはまってしまいました。
>
> URL直接アクセス時とフォワードした場合はurlPatternが優先であるという
> 仕様で間違いないでしょうか?
>
正確には、パスがアクション名で終わっている場合
(パラメータ用のパスがない場合)は、
メソッド名がパラメータに含まれている実行メソッドが選ばれます。
パラメータにshowPageもdeleteも含まれているようなケースは、
先に見つかったほうが選択されます。
先というのは、XxxAction.class.getMethods()が返す順番が
先という意味です。
上記以外は、XxxAction.class.getMethods()が返す順番に
実行メソッドがチェックされ、urlPatternが最初に一致したものが
選ばれます。
urlPatternが{xxx}のように全選択のときが、
はまりそうですね。
全選択の実行メソッドは、検索の順番が最後になるように
調整を入れたいと思います。
よろしくお願いします。
>
> --
> Kazuya Sugimoto
> Microsoft MVP Visual Developer - Solutions Architect
> http://d.hatena.ne.jp/sugimotokazuya/
> _______________________________________________
> Seasar-user mailing list
> [E-MAIL ADDRESS DELETED]
> https://ml.seasar.org/mailman/listinfo/seasar-user
>
Seasar-user メーリングリストの案内