2012-12-24 3 views
3

프로젝트에 jsp/Servlet을 사용하고 PrimeFaces를 사용하여 JSF로 마이그레이션하기로 결정했습니다. PrimeFaces fileupload 컨트롤을 사용하여 파일을 업로드하는 동안 문제가 발생했습니다. 그러면 web.xml로 구성했을 때 문제가 발생했습니다. 이전의 JSP 파일 업로드 방식이 작동하지 않아 문제가 해결되었습니다.PrimeFaces fileupload

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

답변

4

실제로 HTTP 요청은 한 번만 구문 분석 할 수 있습니다. 클라이언트는 두 번 구문 분석해야하는 경우 두 번째로 보내지 않습니다. 문제는 PrimeFaces 파일 업로드 필터가 어떤 이유로 든 일반 JSP/서블릿 요청에서 호출되므로 일반 JSP/Servlet이 자신의 용도로 파싱하기 전에 JSF에 대한 업로드를 구문 분석한다는 것을 나타냅니다. 이것은 일어나서는 안됩니다.

일반 JSP/서블릿 요청이 아닌 JSF 요청에만 PrimeFaces 파일 업로드 필터를 매핑해야합니다. 보통 FacesServlet에 매핑하여이를 달성합니다.

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

합니다 (<servlet-name>FacesServlet 클래스의 <servlet> 정의에 사용 된대로 정확히 같은 값이어야하며 <filter-name> 정확하게 분명히 파일 업로드 필터 클래스의 <filter> definiton에 사용되는 것과 동일한 값)

또는 이전 JSP/Servlet 파일 업로드 접근법이 명백한 이유로 JSF 페이지에서 곧바로 사용 된 경우 PrimeFaces 파일 업로드 필터를 페이지에만 적용되는보다 구체적인 URL 패턴에 매핑해야합니다 PrimeFaces 파일 업로드 com 포함 고참.

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

당신이 여러 <url-pattern> 항목을 지정할 수 있습니다

주 (당신이 예를 *.jsf 대신 *.xhtml에 대한에 FacesServlet를 매핑 한 경우, 당신은 분명히 /upload.jsf에 URL 패턴을 변경해야합니다) 단일 필터 매핑. 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>