読者です 読者をやめる 読者になる 読者になる

VelocityでContentTypeを動的に変える方法

VelocityでContentTypeを指定する場合はweb.xmlでVelocityViewServletの初期化パラメータにvelocity.propertiesを指定して、velocity.propertiesの中でContentTypeを指定する。


Strutsを使用している場合などでActionクラスでContentType動的にセットしたくても、結局Velocity内で上書きされてしまう。
(velocity.propertiesに何も書いてない場合はVelocityのデフォルトであるtext/htmlがセットされてしまう。


いくつかやり方はあると思うが、私はVelocityServlet(toolsの場合はVelocityViewServlet)のsetContentType()をオーバーライドしたクラスを作成して、そのクラスをviewサーブレットとして使用した。
※オーバーライドしたsetContentType()内では何もしない。



http://www.jajakarta.org/velocity/velocity-1.3.1/docs-ja/developer-guide.html
サーブレットで Velocity を使う」の項で

より高度な使い方として、 VelocityServlet 基本クラスは、リクエスト処理のハンドリングの一部をオーバーライドできます。
オーバーライドできるのは以下の各メソッドです。

にvoid setContentType( HttpServletRequest,HttpServletResponse ) があるので、大丈夫だろう。



とりあえずこれで凌げるか試してみる。
だめだったらやっぱりVelocityServletを各ContentType毎に作成するしかないのかなぁ・・・