2013-10-04 29 views
6

PrimeFaces 3.5でfileUploadコンポーネントを作成してイベントを発生させることはできません。私はその話題に関する多くの記事を読んでそこにアドバイスしたが、それでもうまくいきません。私はすべてのモード(シンプル、オート、アドバンス)を成功させずに試しました。fileUploadはJSF 2.2のPrimeFaces 3.5でイベントを起動しません

標準のinputFileタグをJSF仕様から使用すると、正しく動作します。

これは私のweb.xmlファイルである:

<?xml version="1.0" encoding="UTF-8"?> 
<web-app version="3.1" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"> 

<context-param> 
    <param-name>javax.faces.PROJECT_STAGE</param-name> 
    <param-value>Development</param-value> 
</context-param> 
<context-param> 
    <param-name>primefaces.THEME</param-name> 
    <param-value>redmond</param-value> 
</context-param> 
<servlet> 
    <servlet-name>Faces Servlet</servlet-name> 
    <servlet-class>javax.faces.webapp.FacesServlet</servlet-class> 
    <load-on-startup>1</load-on-startup>    
</servlet> 

<servlet-mapping> 
    <servlet-name>Faces Servlet</servlet-name> 
    <url-pattern>/faces/*</url-pattern> 
</servlet-mapping> 

<filter> 
    <filter-name>PrimeFaces FileUpload Filter</filter-name> 
    <filter-class>org.primefaces.webapp.filter.FileUploadFilter</filter-class> 
</filter> 
<filter-mapping> 
    <filter-name>PrimeFaces FileUpload Filter</filter-name> 
    <servlet-name>Faces Servlet</servlet-name> 
</filter-mapping> 

<session-config> 
    <session-timeout> 
     30 
    </session-timeout> 
</session-config> 
<welcome-file-list> 
    <welcome-file>faces/home.xhtml</welcome-file> 
</welcome-file-list> 
</web-app> 

そして、これは、ファイルアップロードタグと私の見解ページの一部です:

<h:form enctype="multipart/form-data"> 
    <p:dialog id="basicDialog" header="Add pictures" widgetVar="dlg1" > 
     <p:fileUpload fileUploadListener="#{galleryManagedBean.addPicturesToGallery}" multiple="true"/> 
    </p:dialog> 
</h:form> 

エキス管理対象Beanから呼び出されるメソッドを持ちますタグから:

@Named(value = "galleryManagedBean") 
@RequestScoped 
public class GalleryManagedBean { 
    public void addPicturesToGallery(FileUploadEvent event) 
    { 
     System.out.println("Triggered upload"); 
    } 
} 

また、私は、HTTP POST要求はIの後に適切に解雇されていることを追加したいと思いますChromeのデバッガツールを使用して確認しました。

Iは、クラスパス、すなわちに必要なライブラリを追加しました:

commons-fileupload-1.3.jar 
commons-io-2.4.jar 
+1

PF 3.5は、JSF 2.0/2.1用に特別に開発されたものであり、必ずしもJSF 2.2で動作するとは限りません。 PF 4.0は、JSF 2.2用に特別に開発されたもので、2日前に偶然にリリースされました。私は試してみることをお勧めします。 – BalusC

+0

ビンゴ! PF 4.0では正常に動作します。ありがとう@BalusC! – bajer83

+0

素晴らしい。私はもう少し研究を行い、答えを掲示した。 – BalusC

答えて

6

これはJSF 2.2のFacesServletの変化によって引き起こされます。そのバージョン以来、FacesServletは、サーブレット3.0固有の新しい@MultipartConfigアノテーションの存在により、ファイルアップロード(具体的にはmultipart/form-data HTTPリクエスト)をネイティブにサポートしています。また、新しい<h:inputFile>コンポーネントが導入され、標準JSFコンポーネントセットにファイルアップロードコンポーネントを提供しました。

これは、この新しいJSF 2.2機能をまったく考慮していなかった古いPrimeFaces 3.xバージョンのPrimeFacesファイルアップロード機能と競合します。 PrimeFaces 3.xファイルアップロードフィルタは、このジョブをFacesServletのままにしておきながら、要求全体を解析して消費しました。これにより、FacesServletはHTTPリクエストを正しくデコードできなくなりました(送信された値とアクションを特定する)。

JSF 2.2用に特別に設計されたPrimeFaces 4.0は、これをすべて考慮しています。 PrimeFacesファイルアップロードフィルタのthis changesetでは、JSF 2.2を認識してフィルタの解析をバイパスするための変更を確認できます。理論的には、これはもはや使用されないように、ファイルアップロードフィルタ登録をweb.xmlから完全に削除するだけで十分です。

PrimeFaces 4.0にアップグレードすると問題なく動作します。それはちょうど2日前に正式に公式にリリースされたので、あなたはそれに間に合うはずです。

関連する問題