[Seasar-user:14626] Re: 【SAStruts】パラメータ付URLをクリックして、元の画面に遷移する場合は、リダイレクトが必須でしょうか?
Yasuo Higa
[E-MAIL ADDRESS DELETED]
2008年 6月 10日 (火) 18:27:19 JST
ひがです。
> 度々すいません、尾野です。
>
> パラメータ付URLをクリックして、元の画面に遷移する場合は、リダイレクトが必須でしょうか?
>
> 例えば、
>
> 一覧画面にある「削除リンク」をクリックして、
> 再描画して、一覧画面を表示するケースがある場合です。
>
> @Execute(validator = false, urlPattern = "delete/{key}")
> public String delete() {
> Condition condition = jdbcManager.from(Condition.class).id(conditionDto.key).getSingleResult();
> int i = jdbcManager.delete(condition).execute();
> System.out.println("削除した件数:" + i);
>
> return "index"; // NGケース(フォワードする場合)
> //return "index?redirect=true"; // OKケース(リダイレクトする場合)
>
> }
>
>
> フォワードの場合、画面に描画されるURLが以下のようになります。
>
> 初期表示のURL :delete/1
> フォワード後のURL :delete/delete/1
>
フォワードした場合には、リクエスト時のパスをブラウザは認識します。
フォワードされたパスではありません。
HogeActionに
<a href="delete/${f:u(xxx.id)}" ...>
のようなリンクがあった場合、
初期表示時にブラウザが認識しているカレントのパスは/hoge/です。
/hoge/delete/1をクリックするとブラウザが認識しているカレントのパス
は/hoge/delete/です。
リンクをクリックして次画面に戻ったときのhref="delete/1"が
どのように解釈されるかというとカレントのパスから見たパスになるので
/hoge/delete/delete/1になります。
これを避けるためには、1.0.2-rc4から追加されたf:url()を
使ってこう書いてください。
<c:set var="url" value="delete/${f:u(xxx.id)}"/>
<a href="${f:url(url)}" ...>
f:url()を使うとカレントのパスではなく、コンテキストルートから見た
パスになります。
c:setなしでいけるといいのだけど、JSPのファンクションは
ネストして使えないみたい。
アイディア誰かたのむ
Seasar-user メーリングリストの案内