[Seasar-user:14631] Re: 【SAStruts】パラメータ付URLをクリックして、元の画面に遷移する場合は、リダイレクトが必須でしょうか?
K.O.
[E-MAIL ADDRESS DELETED]
2008年 6月 10日 (火) 23:07:50 JST
お世話になっております、大原です。
> c:setなしでいけるといいのだけど、JSPのファンクションは
> ネストして使えないみたい。
この方向で少し調べてみました。
${f:url(f:u(xxx.id))} はOKだけど、文字列連結
${f:url('delete/'+f:u(xxx.id))} ができないということみたいです。
試しにf:concat(a,b)というようなファンクションを作れば、
${f:concat('delete/', f:u(xxx.id))} はできました。
ただこれだと色々なurlPatternに対応できないですね。
または、Strutsのhtml:linkタグを使って
<html:link page="/delete/${f:u(xxx.id)}">
コンテキストルートから見たパスに遷移するという要件は満たしますが、
いずれも、読みやすさが損なわれるので、リダイレクトで差し支えなければ、
出羽さんの書かれた形がよさそうですね。
以上よろしくお願いします。
> ひがです。
>
>> 度々すいません、尾野です。
>>
>> パラメータ付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 mailing list
> [E-MAIL ADDRESS DELETED]
> https://ml.seasar.org/mailman/listinfo/seasar-user
>
----
Kazutaka OHARA
Seasar-user メーリングリストの案内