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