2014-02-10 1 views
2

p : fileUpload를 사용하려고했지만 fileUploadListener 메소드가 호출되지 않았거나 예외가 생성되지 않았습니다. PrettyFaces가 없으면 파일 업로드가 정상적으로 작동합니다.PrimeFaces 4.0, PrettyFaces 3.3.3 및 GlassFish 4에서 파일 업로드가 작동하지 않습니다.

일부 연구를 마친 후 다시 작성 FAQ (http://ocpsoft.org/rewrite/docs/faq)에서 "왜 파일 업로드가 더 이상 제대로 작동하지 않습니까?"라는 질문을 발견했습니다. 해결책 일 수 있지만 Tomcat에서만 테스트되었습니다. GlassFish에서 시도했지만 성공하지 못했습니다.

그런 다음 OcpSoft 포럼에서 내 문제를 해결하는 게시물을 발견했습니다 : http://ocpsoft.org/support/topic/pretty-primefaces-fileupload/page/2/#post-25781. 파일 업로드 코드를 다른 페이지 소스에 넣고 HTML iframe 태그를 사용하여 참조하십시오.

그래, 문제가 해결되었지만 fileUploadListener 메서드가 해결 방법없이 호출되어야하는 반면 iframe 솔루션에는 만족하지 않습니다. 그렇다면 누구나 파일 업로드가 PrettyFaces와 작동하는 방식으로 구성하는 방법을 알고 있습니까?

메이븐 의존성 :

<dependency> 
    <groupId>javax</groupId> 
    <artifactId>javaee-web-api</artifactId> 
    <version>7.0</version> 
    <scope>provided</scope> 
</dependency> 

<dependency> 
    <groupId>org.primefaces</groupId> 
    <artifactId>primefaces</artifactId> 
    <version>4.0</version> 
</dependency> 
<dependency> 
    <groupId>commons-io</groupId> 
    <artifactId>commons-io</artifactId> 
    <version>1.4</version> 
</dependency> 
<dependency> 
    <groupId>commons-fileupload</groupId> 
    <artifactId>commons-fileupload</artifactId> 
    <version>1.2.1</version> 
</dependency> 

<dependency> 
    <groupId>com.ocpsoft</groupId> 
    <artifactId>prettyfaces-jsf2</artifactId> 
    <version>3.3.3</version> 
</dependency> 

XHTML 소스 코드 :

<html xmlns="http://www.w3.org/1999/xhtml" 
    xmlns:f="http://xmlns.jcp.org/jsf/core" 
    xmlns:h="http://xmlns.jcp.org/jsf/html" 
    xmlns:p="http://primefaces.org/ui"> 

    <h:head></h:head> 

    <h:body> 

     <h:form> 
      <p:fileUpload fileUploadListener="#{fileUploadMB.handleFileUpload}" auto="true" 
       update="fileName" /> 

      <h:outputText id="fileName" value="#{fileUploadMB.uploadedFileName}" /> 
     </h:form> 
    </h:body> 

</html> 

관리 콩 :

@ManagedBean 
@ViewScoped 
@URLMapping(pattern = "/index", viewId = "/index.xhtml") 
public class FileUploadMB { 

    private UploadedFile uploadedFile; 
    private String uploadedFileName; 

    public void handleFileUpload(FileUploadEvent evt) { 
     this.uploadedFile = evt.getFile(); 
     this.uploadedFileName = evt.getFile().getFileName(); 
    } 


    public String getUploadedFileName() { 
     return uploadedFileName; 
    } 


    public void setUploadedFileName(String uploadedFileName) { 
     this.uploadedFileName = uploadedFileName; 
    } 
} 

그리고 web.xml에 :

<welcome-file-list> 
    <welcome-file>index.xhtml</welcome-file> 
</welcome-file-list> 

<context-param> 
    <param-name>com.ocpsoft.pretty.BASE_PACKAGES</param-name> 
    <param-value> 
     <!-- Packages with @URLMapping annotation from PrettyFaces --> 
     br.nti.ufms 
    </param-value> 
</context-param> 
<context-param> 
    <param-name>com.ocpsoft.pretty.DEVELOPMENT</param-name> 
    <param-value>true</param-value> 
</context-param> 
<context-param> 
    <param-name>primefaces.UPLOADER</param-name> 
    <param-value>commons</param-value> 
</context-param> 

<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> 

<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>*.xhtml</url-pattern> 
</servlet-mapping> 

답변

2

이것은 아마도 필터 체인 문제 일 수 있습니다. 등록 필터에 다음을 추가하십시오.

<dispatcher>FORWARD</dispatcher> 
<dispatcher>REQUEST</dispatcher> 

prettyfaces faq question 2에 더를 참조하십시오.

+0

파일 업로드시 2-3MB 파일 크기 이상으로 작동합니까? –

0

제게는 Primefaces 5.0으로 작동하지 않았습니다. & Prettyfaces Tomcat 7.0.41에서 2.0.12-final로 다시 작성하십시오.

하지만 내 web.xml

<filter> 
    <filter-name>PrimeFaces FileUpload Filter</filter-name> 
    <filter-class> 
     org.primefaces.webapp.filter.FileUploadFilter 
    </filter-class> 
    <init-param> 
     <param-name>thresholdSize</param-name> 
     <param-value>51200000</param-value> 
    </init-param> 
    <init-param> 
     <param-name>uploadDirectory</param-name> 
     <param-value>/uploadedFilesDirectoryForGlassfish</param-value> 
    </init-param> 
</filter> 
<filter-mapping> 
    <filter-name>PrimeFaces FileUpload Filter</filter-name> 
    <servlet-name>Faces Servlet</servlet-name> 
</filter-mapping> 

에서이 부분을 제거하고 context.xml이 추가 후 :

<Context allowCasualMultipartParsing="true"> 

p:fileUpload

뿐만 아니라 재 작성 URL의 모든 잘 작동하기 시작했다.

This page이 유용 할 수 있습니다.

또한 참조 : http://www.ocpsoft.org/rewrite/docs/faq & this SO answer


그러나 대기가

그냥 단지, 대용량 파일 업로드를위한 파일 업로드 리스너가 여전히 트리거되지 않습니다 작은 파일 업로드를 위해 일했다 관찰했다. 솔루션을 가진 사람이 있습니까?