上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

役に立ったらぽちっとよろしく。 人気ブログランキングへ

JSFの現在のバージョン1.2ではファイルのアップロード処理は標準では提供されていないっぽい。で、ネットで検索したらいくつか対策は見つかるけど、ちょっと自分には合わない…残念。…ので、我流の方法を試して見る事に。

ネットで見つかったのはこんなの

  • Apach MyFacesを使えばファイルアップロード用のタグがあるらしいのでそれを使う。
  • ファイルのアップロード部分だけServlet+JSP方式で処理する。

問題と思うのは…。最初の方法の場合、MyFacesはファイルアップロードのためだけのライブラリではないので、ファイルのアップロードのためだけに巨大なライブラリを入れたくない場合に不向き。次の方法の場合、必要なライブラリはApach FileUpload等だけで済むけど、同じページのファイルアップロード以外の部分をServletでガリガリ処理する事になる。

我流の方法ってのはこんなの

  1. Servlet Filterでリクエストを捕まえる。
  2. リクエストを解析し(HTTP&POST&multipart/form-data)以外は普段通りの処理をする。
  3. 目的のリクエストの場合はJSF用のServletが処理出来るよう、HttpServletRequestWrapperで 解析したリクエストをapplication/x-www-form-urlencoded形式に変換。ファイル形式のパラメタは リクエストスコープの属性として格納。その後は普段どおりに処理。

こうすればJSF用のServletがmultipart/form-data形式に対応出来るし、必要なライブラリもApache FileUploadだけで済む。別の方法で、自前でリクエストの解析からJSFのライフサイクル実行まで行うってのも考えられるけど…リクエストをラップするこの方法の方がコードは断然短いはず。

ちなみに…有名なサンプルプログラム PetStore ではファイルのアップロードはAJAXを使ってるっぽい。たぶんAJAXによるファイルのアップロードリクエストをShale RemotingがApache FileUploadで解析する部品に流してる雰囲気。でどうも詳しく見ていくとAJAX経由での処理の流れしか想定してないみたい。てかそもそもPetStoreはJavaScriptをOFFにするとページが表示されなくなったりする。

というかJSF、ファイルアップロード位は標準で備えてて欲しいような…。
けど、ま、いっか!いい方法思いついたし。今さら標準なんて…!!
…うけけ!おいらは自分が良ければそれでいいって性格なのさ!!

役に立ったらぽちっとよろしく。 人気ブログランキングへ

続きを読む »

スポンサーサイト
Copyright © ふらふら技術者の日記 All Rights Reserved.
Powered by FC2 Blog
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。