- - PR -
JSF にてファイルアップロード方法
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2007-05-30 15:24
またわからない事が出てきましたので、
お知恵を拝借出来れば嬉しく思います。 【環境】 OS:Windows 2000 Web サーバ:Tomcat 5.0 JDK:1.4 JSF:1.1 【やりたいこと】 ファイルのアップロードをしたいと思っています。 ファイルをアップロードするためには、 from のコンテントタイプを「multipart/form-data」にする必要があると思います。 具体的なコードのサンプルとしては
で良いと思っております。 この状態でボタン「Upload」を押下しても何もアクションが起きません。 「enctype」を記述しないと正常にメソッドはコール出来ますが、 そうするとファイル転送が出来ません。 ( コンテントタイプを application/x-www-form-urlencoded と認識しているため。当然ですが。。。 ) ちなみに、メソッドタイプを「Post」にする必要があると思いますが、 当該 JSP ファイルを HTML に展開した場合の form タグは「Post」になっております。 Upload 自体は Servlet でロジックを作ってみて、そちらで成功しましたので 後は呼び出し部分の所だけだと認識しています。 他に何か入れないといけないのでしょうか? 宜しくお願いいたします。 [ メッセージ編集済み 編集者: 小僧 編集日時 2007-05-30 15:47 ] | ||||||||
|
投稿日時: 2007-05-30 15:56
生成されたHTMLはどうなっていますか?
どのようなURLにPOSTしようとしているのでしょうか。 サーバ側ではそのURLでのアクセスが記録されていますか? | ||||||||
|
投稿日時: 2007-05-30 16:07
返信ありがとうございます。
生成された HTML の抜粋を記述しますね。
idは前回投稿と異なると思います。 また、action が指している JSP も書き直しました。 それ以外は生成されたものになります。 > サーバ側ではそのURLでのアクセスが記録されていますか? ちょっとこの意味がわからないのですが。。。 ボタン押下された事がサーバ側で認識しているか?という事でしょうか? それが出来ないので質問しているのですけど。。。 ちなみに、前回投稿でも書きましたが「enctype」を外すとメソッドはコールされるので 記述ミスなどではないと思っていますし、コードは動くものだと思っています。 宜しくお願いいたします。 | ||||||||
|
投稿日時: 2007-05-30 16:55
最近JSFのファイルアップロードを調べたことがあるのですが、JSFでやってくれないみたいなので、HTMLのform使って、直接受けたデータを自分で解析してます。実績0ですが、問題なさそうです。
問題や無駄なところがあったら、誰か指摘してもらえるとうれしいな。
| ||||||||
|
投稿日時: 2007-05-30 17:00
404だろうがアクセスログに記録されているならパケットは飛んでいるけど Servletなどの起動ができていない、つまり設定ミスってことです。 TomcatにアクセスログのValveなどが設定されてるならServletを叩くレベルと 別にアクセスに対してログが取れますし、Apache-Tomcat連携している場合でも 途中段階でいろいろログがだせますよね。 そもそもサーバにパケットが飛んでいないならHTMLの時点でのミスなり URLの記述がおかしい(docbaseが別のサーバとかローカルとか)なり そういうことになるので、その切り分けをしましょうよ、と。 端折って端的に書いたので誤解を招いたかもしれません。 さて、通常ファイルのアップロードをする場合、HTML的にはinputのtype="file"を利用します。 該当formのinputはtype="hidden"ですが、そもそもフォームの作り方がまずいように思えますね。
そうなんですか。 前回投稿について触れられていませんでしたのでその点を配慮することが出来ませんでした。 | ||||||||
|
投稿日時: 2007-05-30 17:43
返信ありがとうございます。
> 最近JSFのファイルアップロードを調べたことがあるのですが、 > JSFでやってくれないみたいなので えーと、記載頂いたソースは Java ( Bean ) ですよね? こちらは私のほうも上手く行きました。 問題はクライアント ( HTML ) にて multipart/form-data でアクションが出来ない、という事になっております。 > そもそもサーバにパケットが飛んでいないならHTMLの時点でのミスなり ぇぇ、それは理解しています。 が、最初の投稿で 「「enctype」を記述しないと正常にメソッドはコール出来ますが」 と書いているので、記述ミスではないと思っていますが如何でしょうか? > さて、通常ファイルのアップロードをする場合、HTML的にはinputのtype="file"を利用します。 仰るとおり、提示したサンプルにはありませんが、 ファイルをinput type=file で取得するのは理解しています。 問題はボタンを押下した際、Bean のメソッドが呼ばれないことですので、 掲載は割愛しました。 > 前回投稿について触れられていませんでしたのでその点を配慮することが出来ませんでした。 「前回投稿」とは最初の投稿のことを指しています。 ( 別のスレッドのことではないのです。この発言の趣旨がちょっと理解出来なかったので補足させて頂きました ) 再度繰り返しますが、解決したい問題は 「form に「multipart/form-data」を設定すると、Bean のメソッドをコールしない」 です。 宜しくお願いいたします。 | ||||||||
|
投稿日時: 2007-05-30 17:56
h:formでなく普通のformを使ってBeanを呼び出したのではだめということなのなら、特にいうことはありません。
| ||||||||
|
投稿日時: 2007-05-30 18:35
あー。すいません。何か勘違いしてました。的外れな回答をして申し訳ない。 enctypeがあるとupFile()が呼び出されない、なければ呼び出される、と。 とりあえず、だっちょさんもおっしゃってますが、Sunの参照実装では提供されていないようですね。 kodersで検索すると、ほとんどがmyfacesを使用してのアップロードになっています。 http://www.koders.com/default.aspx?s=JSF+enctype+multipart%2Fform-data&la=*&li=* myfacesのタグライブラリを使っていないものでは http://www.koders.com/jsp/fid70A301B8C6A5D441935550F868317D00A82AFD22.aspx?s=JSF+enctype+multipart%2fform-data などが見つかりましたが、なにやらかなり強引な方法を使っているように見えます。 formタグもinput type="file"も自前で書いてますから強引にJSFのイベント部分だけを使っている感じですね。 |