| Issue 185: | @Varでオーバーロードすると@Varの少ないほうのメソッドが効かずに@Defaultが呼び出される | |
| 1 person starred this issue and may be notified of changes. | Back to list |
以下のように@Varでオーバロードメソッドがある場合に
適切なメソッドが呼び出されず、@Defaultが呼ばれてしまう。
まずは現状調査から。
{{{
@RequestScope
@Page("edit")
public class CodeEditPage {
@Default
@ActionPath("{foo}")
public Navigation index(@Var("foo") String foo) {
System.out.println("index() - {foo}");
System.out.println("foo: " + foo);
return NoOperation.noOp();
}
@GET
@ActionPath("hoge/{foo}")
public Navigation var(@Var("foo") String foo) {
System.out.println("var() - hoge/{foo}");
System.out.println("foo: " + foo);
return NoOperation.noOp();
}
@GET
@ActionPath("hoge/{foo}/{bar}")
public Navigation var(@Var("foo") String foo, @Var("bar") String bar) {
System.out.println("var() - hoge/{foo}/{bar}");
System.out.println("foo: " + foo + " bar:" + bar);
return NoOperation.noOp();
}
}
}}}
Mar 9, 2009
Project Member
#1
shinpei.ohtani@gmail.com
Labels:
-Mileston-T2-0.5.2 Milestone-T2-0.5.2
Apr 8, 2009
メソッドの呼び出し順序を以下のように規定しました。
* 同一の深さ(/hoge/foo, /hoge/{moge})の場合、式言語が入ったパスより、固定のパスを優
先する
* テンプレート指定されているパスが長いほうから呼び出される。テンプレート指定とは
@ActionPath("/hoge/foo/bar")のような場合。
* メソッド名をパスとして使う場合は、パスとしての優先度は低くなる
* テンプレートパスが同じ場合、またはメソッド名と使おうとしている場合、アクションアノ
テーションのついている数が多いほうが先に呼ばれる
* デフォルトメソッドは呼ばれる優先度が最も低い
このような修正をr3491にて入れました。
Status:
Fixed
Jun 17, 2009
参照先が間違ってました。 r3489が正しいです。失礼しました。 |