- PR -

[Struts] Actionで sendRedirect は使わないべき?

1
投稿者投稿内容
raystar
ぬし
会議室デビュー日: 2003/01/16
投稿数: 251
お住まい・勤務地: Tokyo/Japan
投稿日時: 2005-03-16 14:31
こんにちは。

StrutsのActionServletを継承したクラスにて、

response.sendRedirect(String) は使わないほうが
ベターでしょうか。

せっかくフレームワーク上で動かすので、なるべく低レベルAPIは
つかわないように心がけていたのです。。。

どうしても パラメータ付URLにリダイレクトしたいときに、
ActionMapping.findForward(String) を使用すると、
パラメータを渡せないのかなと思いました。

また、ActionクラスはActionForwardを戻り値としているので、
sendRedirectを使用した場合、、、、、

コード:
response.sendRedirect("newAction.do?parameter=xxxxx");

return null;



と記述しなければならないですよね。

皆さんはStrutsでパラメータ付URLにリダイレクトするときに、
sendRedirectを使用しているのでしょうか?

ふとおもった疑問です。
tak3
ベテラン
会議室デビュー日: 2004/04/15
投稿数: 80
お住まい・勤務地: 菜の花・銀杏
投稿日時: 2005-03-16 15:24
引用:
response.sendRedirect(String) は使わないほうが
ベターでしょうか。


ベターだと思います。

引用:
どうしても パラメータ付URLにリダイレクトしたい


うーーん。パラメータ付URLの使用が絶対条件でしょうか?
あまり、そのようなケースに出会っていないので・・・
ちょっと調べたところ

ActionForward#setPath(String)
ActionForward#setRedirect(boolean)

を使えば、Strutsフレームワークだけで解決できそうな気がしますが・・・
raystar
ぬし
会議室デビュー日: 2003/01/16
投稿数: 251
お住まい・勤務地: Tokyo/Japan
投稿日時: 2005-03-16 15:57
tak3さんこんにちは。

setPathとかあったんですね。

ためしに早速。。。

ActionForward forward = new ActionForward();
forward.setRedirect(true);
forward.setPath("newAction.do?param=true");
return forward;

を書いてみたところ、見事にリダイレクトされました。
これで、 return null とか書かなくてよさそうです。


用途としては、、、、

例えば、 mail.do?mailID=1000 で MAIL_ID 1000 のメールを取得するときに、
前提として認証済みでなければならないとします。

未認証時にアクセスしてきたばあい、ログインページにとばします。
そこで、ログインページに
http://host/login.do?from=mail.do?mailID=1000 とし、
ログイン認証後、 http://host/mail.do?mailID=1000 にリダイレクトしたいなぁ。。。
と思っていたところです。

これでなんとかなりそうです。

ありがとうございました!

山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2005-03-16 23:28
sturts-config.xml の設定(で redirect="true" とか書けば OOTB でリダイレクトしてくれますよ。
かつのり
ぬし
会議室デビュー日: 2004/03/18
投稿数: 2015
お住まい・勤務地: 札幌
投稿日時: 2005-03-16 23:50
org.apache.struts.action.RedirectingActionForwardと言うのがあります。
名前の通り、リダイレクトを行ってくれるものです。
ActionForwardで属性等の設定を行う必要がありません。
ただそれだけですが・・・

コード:
    return new RedirectingActionForward("/xxx.do?param=" + param); 



こんな感じで使用します。

フレームワーク内ではフレームワーク層から見て
より低レベルであるAPIの使用は控えるべきです。
raystar
ぬし
会議室デビュー日: 2003/01/16
投稿数: 251
お住まい・勤務地: Tokyo/Japan
投稿日時: 2005-03-17 11:56
引用:

インギさんの書き込み (2005-03-16 23:28) より:
sturts-config.xml の設定(で redirect="true" とか書けば OOTB でリダイレクトしてくれますよ。



インギさん、こんにちは。
struts-config.xml で設定できるのは 固定のパスだけですよね?
クエリーストリングを動的に生成してリダイレクトを行いたかったので。。。
raystar
ぬし
会議室デビュー日: 2003/01/16
投稿数: 251
お住まい・勤務地: Tokyo/Japan
投稿日時: 2005-03-17 11:58
コード:
    return new RedirectingActionForward("/xxx.do?param=" + param); 



かつのりさん、こんにちは。
これいいですね。
綺麗なコードが書けそうです。

使わせていただきます!ありがとうございました!
1

スキルアップ/キャリアアップ(JOB@IT)