- PR -

JSF にてファイルアップロード方法

投稿者投稿内容
小僧
大ベテラン
会議室デビュー日: 2005/06/24
投稿数: 122
投稿日時: 2007-05-30 18:56
返信ありがとうございます。
( しかし、お二人とも素早い反応ですね。ありがたい )

> h:formでなく普通のformを使ってBeanを呼び出したのではだめということなのなら、特にいうことはありません。
うーむ、残念です。

> とりあえず、だっちょさんもおっしゃってますが、Sunの参照実装では提供されていないようですね。
やはりないのですね。残念です。

> などが見つかりましたが、なにやらかなり強引な方法を使っているように見えます。
よく見つけられましたね。
結構探したのに、このページはヒットしませんでした。
が、無理矢理使っている感じなのですね。

MyFaces を使えばなんとかなるかもしれない、とのアドバイスがありましたので
こちらの URL 先の方法でもがいてみたいと思います。

アドバイス、ありがとうございました。
小僧
大ベテラン
会議室デビュー日: 2005/06/24
投稿数: 122
投稿日時: 2007-05-31 09:33
お世話になります。

一応、結果連絡ですが、ご紹介頂いたサイト の通り
やってみましたが、現象変わらずでした。
( ボタン押下してもメソッド動かない )
相変わらず「enctype="multipart/form-data"」を外すと動くのですが。。。

google で検索しても同様の悲鳴は聞こえてこないのが不思議なのですが。。。
Servlet では動いているので、JSF を使わないでやっているのでしょうか?
こちらもちょっと工夫して JSF & Servlet という感じでアップロードの所だけ
特殊な作りにしたいと思います。

お付き合い、ありがとうございました。
よしだひろゆき
大ベテラン
会議室デビュー日: 2004/11/22
投稿数: 141
投稿日時: 2007-05-31 11:43
こんにちは。親子画面の件ではあまりお役に立てなかったので、多少でもお役に立てればと思いまして…

リクエストがJSFまで届いていて、JSFの処理のどこかに問題がありそうな場合には、まずはPhaseListnerを使って、どのフェーズが実行されているかを確認するのが良いと思います。

PhaseListnerのサンプルコードを示します:
コード:
MyPhaseListener.java:

public class MyPhaseListener implements PhaseListener {
  public void afterPhase(PhaseEvent event) {
    printLog(event, "after phase:");
  }
  public void beforePhase(PhaseEvent event) {
    printLog(event, "before phase:");
  }
  protected void printLog(PhaseEvent event, String msg) {
    UIViewRoot view = event.getFacesContext().getViewRoot();
    String viewID = "no view";
    if (view != null) viewID = view.getViewId();
    Logger.global.info(msg + event.getPhaseId()  + " " + viewID);
  }
  public PhaseId getPhaseId() {
    return PhaseId.ANY_PHASE;
  }
}

faces-config.xml:

<lifecycle>
        <phase-listener>MyPhaseListener</phase-listener>
</lifecycle>



これで例えば
2007/05/31 11:37:57 MyPhaseListener printLog
情報: before phase:RESTORE_VIEW 1 no view
2007/05/31 11:37:58 MyPhaseListener printLog
情報: after phase:RESTORE_VIEW 1 /xxx.jsp
2007/05/31 11:37:58 MyPhaseListener printLog
情報: before phase:RENDER_RESPONSE 6 /xxx.jsp
2007/05/31 11:37:58 MyPhaseListener printLog
情報: after phase:RENDER_RESPONSE 6 /xxx.jsp

のようなログが取れます。この例はRESTORE_VIEWから直接RENDER_RESPONSEへ進んでいるので、viewに対応するコンポーネントツリーが存在しなかったことが分かります。

PROCESS_VALIDATIONSやUPDATE_MODEL_VALUESでなんらかのエラーがあると、INVOKE_APPLICATIONをスキップします。

ちなみに、先日の親子画面のサンプルでは、二つの画面のログが交錯しました。

お役に立てれば幸いです。
小僧
大ベテラン
会議室デビュー日: 2005/06/24
投稿数: 122
投稿日時: 2007-06-01 18:40
お世話になります。

わざわざのアドバイス、ありがとうございます。
返信遅れまして申し訳ありません。

> 親子画面の件ではあまりお役に立てなかったので、多少でもお役に立てればと思いまして…
いえいえ、お返事頂けるだけでもありがたいものです。

調査方法、参考にさせて頂きます。
JSF の動きはおぼろげでしか理解していませんが、
頂いた方法で対応したいと思います。

本当にありがとうございました。

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