3

プロジェクトにjsp/Servletを使用していて、PrimeFacesを使用してJSFに移行することにしました。PrimeFacesfileuploadコントロールを使用してファイルをアップロードしようとしたときに問題が発生しました。その後、web.xmlに構成すると、問題が発生しました。これで、古いjspファイルのアップロード方法がすべて機能しなくなりました。

 DiskFileUpload upload = new DiskFileUpload();
 List items = upload.parseRequest(request);
4

1 に答える 1

4

実際、HTTPリクエストは1回しか解析できません。2回解析する必要がある場合、クライアントは2回目に送信することはありません。問題は、PrimeFacesファイルアップロードフィルターが何らかの理由でプレーンJSP /サーブレットリクエストでも呼び出され、プレーンJSP/サーブレットが自分で使用するために解析する前にJSFのアップロードを解析することを示しています。これは起こらないはずです。

PrimeFacesファイルアップロードフィルターは、プレーンなJSP /サーブレットリクエストではなく、JSFリクエストのみにマッピングする必要があります。通常、これをにマッピングすることで実現しますFacesServlet

<filter-mapping>
    <filter-name>PrimeFaces FileUpload Filter</filter-name>
    <servlet-name>Faces Servlet</servlet-name>
</filter-mapping>

(は、クラスの定義で使用されているのとまったく同じ値である必要<servlet-name>があります。これは、ファイルアップロードフィルタークラスの<servlet>定義で使用されているのとまったく同じ値であることは明らかです)FacesServlet<filter-name><filter>

または、その古いJSP /サーブレットファイルアップロードアプローチが何らかの理由でJSFページで直接使用されている場合は、PrimeFacesファイルアップロードコンポーネントを含むページのみをカバーするより具体的なURLパターンにPrimeFacesファイルアップロードフィルターをマッピングする必要があります。 。

<filter-mapping>
    <filter-name>PrimeFaces FileUpload Filter</filter-name>
    <url-pattern>/upload.xhtml</url-pattern>
</filter-mapping>

FacesServlet(たとえば、*.jsfの代わりにをマップした場合*.xhtmlは、明らかにURLパターンをに変更する必要があります/upload.jsf

1つのフィルターマッピングで複数のエントリを指定できることに注意してください<url-pattern>。これは、PrimeFacesファイルアップロードコンポーネントを含む複数のページがある場合に役立ちます。

<filter-mapping>
    <filter-name>PrimeFaces FileUpload Filter</filter-name>
    <url-pattern>/upload1.xhtml</url-pattern>
    <url-pattern>/upload2.xhtml</url-pattern>
    <url-pattern>/upload3.xhtml</url-pattern>
</filter-mapping>
于 2012-12-24T23:56:44.837 に答える