- PR -

ActionからActionを呼び出す方法

投稿者投稿内容
かつのり
ぬし
会議室デビュー日: 2004/03/18
投稿数: 2015
お住まい・勤務地: 札幌
投稿日時: 2005-11-20 01:41
APIの説明を読まれたのでしょうか。
ServletRequest#getParameterMapは、不変のjava.util.Mapを返すとあります。
フィルタ云々は関係ありません。

ただし、フィルタでリクエストのラッパーを作成して、
変更可能なMapを返すメソッドでオーバーライドするという方法が可能です。

1.リクエストラッパーのコンストラクタで、
   不変のパラメータマップの内容と同等なHashMap等のインスタンスを作成
2.リクエストパラメータに関するメソッドをオーバーライド
3.そのメソッドで自作のMapのインスタンスを元に値を返すようにする

という感じで実装すれば、パラメータの変更可能なリクエストが作成可能です。
多分、getParameter/getParameterValues/getParameterNames/getParameterMapの
4つメソッドが対象です。

APサーバに依存するようなダウンキャストを行っている場合は
問題が発生すると思いますが、
APサーバに依存するダウンキャストを行う実装の方が問題なので、
気にする必要はないと思います。
uk
ぬし
会議室デビュー日: 2003/05/20
投稿数: 1155
お住まい・勤務地: 東京都
投稿日時: 2005-11-21 12:17
引用:

かつのりさんの書き込み (2005-11-20 01:41) より:
多分、getParameter/getParameterValues/getParameterNames/getParameterMapの
4つメソッドが対象です。


汎用的にやろうと思えばその通りですが、この記事の目的から考えるとgetParameterだけ
オーバライドすれば目的は達成できるように思えます。

ちなみにこんな感じになります。

コード:
public void doFilter(ServletRequest req, ServletResponse res, 
FilterChain chain)throws IOException, ServletException { 

  ServletRequest wrapper = new HttpServletRequestWrapper(req) {
    public String getParameter(String name) {
      if (name.equals("method")) {
        return "登録画面表示";
      } else {
        return super.getParameter(name);
      }
    }
  };
  chain.doFilter(wrapper,res); 

}



マシェ
会議室デビュー日: 2005/10/12
投稿数: 13
投稿日時: 2005-11-24 17:02
返信が遅くなり申し訳ありません。
かつのりさん、ukさんに教わった方法で動きました。
フィルタを使うだけでなく、オーバーライドするということだったんですね。
標準のメソッドでなんとかすることばかり考えていました。
今回はフィルタ、オーバーライドなど大変勉強になりました。
本当にありがとうございました。

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