2017-05-05 5 views
11

Primefaceで<p:fileUpload>に問題があります。最初に私は最初の問題は、私はスニペットを使用している場合、アップロード機能が呼び出されていないということであったページ2018 から始まるDocumentation of Fileuploadでスニペットを試してみました:PrimefaceでFileuploadが機能しない

public void upload() { 
    System.out.println("This is never shown"); 

    if(file != null) { 
      System.out.println("This is never shown"); 
    } 
} 

HTML:

<h:form enctype="multipart/form-data"> 
    <p:fileUpload value="#{fileUploadView.file}" mode="simple" /> 
    <p:commandButton value="Submit" action="#{fileUploadView.upload}" ajax="false"/> 
</h:form> 

私は他の多くのスニペットやソリューションを試しています。私はmode="simple"を選択し、呼ばれajax="true"機能FileUploadView.upload()とそれを組み合わせるが、ファイルは常にNULLである場合は、フォーム、....

:アドバンストモード、fileUploadListenerで、時間内のenctypeを削除しました。

<h:form>からenctypeを削除すると、関数FileUploadView.upload()が呼び出されますが、ファイルは常にNULLです。

私はこのフォーラムですべての可能な解決策を読んでいるので、これはどちらもうまくいかないので、上記の問題について言及します。私もすべてdependenciescontext-paramsfilterを提案しましたが、動作しません。

ここで私は私のpom.xml、web.xmlおよびフルの.javaコードを掲載します: のpom.xml

<?xml version="1.0" encoding="UTF-8"?> 
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 

    <groupId>at.qe</groupId> 
    <artifactId>ASN_Application</artifactId> 
    <version>1.0.0</version> 
    <packaging>war</packaging> 


    <name>ASN_Application</name> 
    <description> 
    </description> 

    <repositories> 
     <repository> 
      <id>prime-repo</id> 
      <name>Prime Repo</name> 
      <url>http://repository.primefaces.org</url> 
     </repository> 


     <repository> 
      <id>spring-releases</id> 
      <url>https://repo.spring.io/libs-release</url> 
     </repository> 

    </repositories> 
    <pluginRepositories> 
     <pluginRepository> 
      <id>spring-releases</id> 
      <url>https://repo.spring.io/libs-release</url> 
     </pluginRepository> 
    </pluginRepositories> 

    <parent> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-parent</artifactId> 
     <version>1.4.1.RELEASE</version> 
    </parent> 

    <properties> 
     <start-class>at.qe.sepm.asn_app.Main</start-class> 
     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
    </properties> 

    <dependencies> 
     <dependency> 
      <groupId>commons-io</groupId> 
      <artifactId>commons-io</artifactId> 
      <version>2.5</version> 

     </dependency> 
     <dependency> 
      <groupId>commons-fileupload</groupId> 
      <artifactId>commons-fileupload</artifactId> 
      <version>1.3.2</version> 
     </dependency> 
     <dependency> 
      <groupId>org.primefaces.themes</groupId> 
      <artifactId>all-themes</artifactId> 
      <version>1.0.10</version> 
     </dependency> 

     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-data-jpa</artifactId> 
     </dependency> 
     <dependency> 
      <groupId>com.h2database</groupId> 
      <artifactId>h2</artifactId> 
      <scope>runtime</scope> 
     </dependency> 

     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-web</artifactId> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-actuator</artifactId> 
     </dependency> 
     <dependency> 
      <groupId>org.glassfish.web</groupId> 
      <artifactId>el-impl</artifactId> 
      <version>2.2</version> 
     </dependency> 
     <dependency> 
      <groupId>javax.enterprise</groupId> 
      <artifactId>cdi-api</artifactId> 
      <version>2.0-PFD2</version> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-security</artifactId> 
     </dependency> 
     <dependency> 
      <groupId>com.sun.faces</groupId> 
      <artifactId>jsf-api</artifactId> 
      <version>2.2.14</version> 
      <scope>compile</scope> 
     </dependency> 
     <dependency> 
      <groupId>com.sun.faces</groupId> 
      <artifactId>jsf-impl</artifactId> 
      <version>2.2.13</version> 
      <scope>compile</scope> 
      <optional>true</optional> 
     </dependency> 
     <dependency> 
      <groupId>org.apache.tomcat.embed</groupId> 
      <artifactId>tomcat-embed-core</artifactId> 
      <scope>compile</scope> 
     </dependency> 
     <dependency> 
      <groupId>org.apache.tomcat.embed</groupId> 
      <artifactId>tomcat-embed-jasper</artifactId> 
      <scope>compile</scope> 
     </dependency> 
     <dependency> 
      <groupId>org.primefaces</groupId> 
      <artifactId>primefaces</artifactId> 
      <version>6.1</version> 
     </dependency> 

     <dependency> 
      <groupId>org.apache.poi</groupId> 
      <artifactId>poi</artifactId> 
      <version>3.16</version> 
     </dependency> 
     <dependency> 
      <groupId>com.lowagie</groupId> 
      <artifactId>itext</artifactId> 
      <version>2.1.7</version> 
     </dependency> 

     <!-- special test dependencies --> 
     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-test</artifactId> 
      <scope>test</scope> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework.security</groupId> 
      <artifactId>spring-security-test</artifactId> 
      <scope>test</scope> 
     </dependency> 
     <dependency> 
      <groupId>nl.jqno.equalsverifier</groupId> 
      <artifactId>equalsverifier</artifactId> 
      <version>2.1.6</version> 
      <scope>test</scope> 
     </dependency> 
     <dependency> 
      <groupId>mysql</groupId> 
      <artifactId>mysql-connector-java</artifactId> 
      <version>6.0.6</version> 
     </dependency> 

    </dependencies> 

    <build> 
     <plugins> 
      <plugin> 
       <artifactId>maven-compiler-plugin</artifactId> 
       <configuration> 
        <source>1.8</source> 
        <target>1.8</target> 
       </configuration> 
      </plugin> 
      <!-- Enable jacoco analysis --> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-surefire-plugin</artifactId> 
       <configuration> 
        <forkMode>once</forkMode> 
        <argLine> 
         ${coverageAgent} 
        </argLine> 
        <useSystemClassLoader>true</useSystemClassLoader> 
       </configuration> 
      </plugin> 
      <plugin> 
       <groupId>org.jacoco</groupId> 
       <artifactId>jacoco-maven-plugin</artifactId> 
       <version>0.7.6.201602180812</version> 
       <configuration> 
        <propertyName>coverageAgent</propertyName> 
       </configuration> 
       <executions> 
        <execution> 
         <goals> 
          <goal>prepare-agent</goal> 
         </goals> 
        </execution> 
        <execution> 
         <id>report</id> 
         <phase>prepare-package</phase> 
         <goals> 
          <goal>report</goal> 
         </goals> 
        </execution> 
       </executions> 
      </plugin> 
     </plugins> 
    </build> 
</project> 

web.xmlの

<?xml version="1.0" encoding="UTF-8"?> 
<web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
      http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 
     version="2.5"> 

    <servlet> 
     <servlet-name>Faces Servlet</servlet-name> 
     <servlet-class>javax.faces.webapp.FacesServlet</servlet-class> 
     <load-on-startup>1</load-on-startup> 
    </servlet> 

    <error-page> 
     <exception-type>org.springframework.security.access.AccessDeniedException</exception-type> 
     <location>/error/access_denied.xhtml</location> 
    </error-page> 


    <context-param> 
     <param-name>javax.faces.STATE_SAVING_METHOD</param-name> 
     <param-value>server</param-value> 
    </context-param> 
    <context-param> 
     <param-name>javax.faces.FACELETS_SKIP_COMMENTS</param-name> 
     <param-value>true</param-value> 
    </context-param> 

<context-param> 
    <param-name>primefaces.FONT_AWESOME</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> 
    <mime-mapping> 
    <extension>eot</extension> 
    <mime-type>application/vnd.ms-fontobject</mime-type> 
</mime-mapping> 
<mime-mapping> 
    <extension>otf</extension> 
    <mime-type>font/opentype</mime-type> 
</mime-mapping>  
<mime-mapping> 
    <extension>ttf</extension> 
    <mime-type>application/x-font-ttf</mime-type> 
</mime-mapping>  
<mime-mapping> 
    <extension>woff</extension> 
    <mime-type>application/x-font-woff</mime-type> 
</mime-mapping> 
<mime-mapping> 
    <extension>svg</extension> 
    <mime-type>image/svg+xml</mime-type> 
</mime-mapping> 

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

    <welcome-file-list> 
     <welcome-file>login.xhtml</welcome-file> 
    </welcome-file-list> 
</web-app> 

FileUploadView.java

@Component 
@Scope("view")  
public class FileUploadView{ 
     @Autowired 
     private PictureService pictureService; 
     @Autowired 
     private UserRepository userRepository; 
     @Autowired 
     private AuditLogRepository auditLogRepository; 
     private Picture picture; 
     private UploadedFile file; 

     public Picture getPicture(){ 
      return picture; 
     } 

     public void setPicture(Picture picture){ 
      this.picture = picture; 
     } 


     public UploadedFile getFile() { 
      return file; 
     } 

     public void setFile(UploadedFile file) { 
      this.file = file; 
     } 
     @PostConstruct 
     public void init(){ 
      file= new DefaultUploadedFile(); 
     } 

     public void upload() { 

      if(file != null) { 
       try{ 
        System.out.println("This is never shown"); 

        AuditLog log = new AuditLog(getAuthenticatedUser().getUsername(),"PICTURE UPLOADED: " + getAuthenticatedUser().getUsername() + " [" + getAuthenticatedUser().getUserRole() + "] ", new Date()); 
        auditLogRepository.save(log); 
        System.out.println(file.getFileName()); 
        picture = new Picture(file.getFileName(), userRepository.findFirstByUsername(auth.getName()), new Date(), file.getFileName()); 
        pictureService.savePicture(picture); 
       FacesMessage message = new FacesMessage("Succesful", file.getFileName() + " is uploaded."); 
       FacesContext.getCurrentInstance().addMessage(null, message); 
       String filename = FilenameUtils.getName(file.getFileName()); 
       InputStream input = file.getInputstream(); 
       OutputStream output = new FileOutputStream(new File(filename)); 
       try { 
        IOUtils.copy(input, output); 
       } finally { 
        IOUtils.closeQuietly(input); 
        IOUtils.closeQuietly(output); 
       } 
       }catch(Exception e) 
       { 

       } 
      } 
     } 

誰かが問題を見つけるのを助けることができれば幸いです。事前に

おかげ

[EDIT]:私はきれいな春のプロジェクトを作ってみましたと<p:fileUpload>を作るためにすべての可能性を試してみましたが、それらのどれも動作していません。しかし私はブラウザのトラフィックを見て、興味深いものを見つけました: Traffic after I uploaded the File with advanced。アップロードボタンを押した直後にPOSTステートメントが表示され、他のGETは1〜2秒後に表示されます。

+0

@BalusCあなたの答えをありがとう。私は数日前に新しいSpringプロジェクトを作成しようとしましたが、投稿したサイトであなたの指示に従いましたが、問題は解決されませんでした。私はSpringを使わないで新しいJSFプロジェクトを作成しようとしますが、その結果をあなたに知らせます。 –

+0

@BalusC「春はカスタムスコープで疑わしい」とはどういう意味ですか? –

+0

@BalusC私はSpringなしで新しいプロジェクトを開始しようとしましたが、このファイルアップロードを動作させることができません。新しいプロジェクトでも、その動作は上記のものとまったく同じです。 –

答えて

1

ドキュメントは

高度なファイルが

ファイルが 定義さfileUploadListenerは次のようにFileUploadEventで処理され、アップロードされたときFileUploadListenerが、このモードでアップロードされたファイルにアクセスするための方法であるのアップロードと言いますパラメータ。

FileUploadEventパラメータを指定してfileUploadListenerを追加します。ボタンをAJAXicalにします。 enctypeを失います。 fileUploadの値を気にしないでください。

+1

それは '良いマニュアルを読む'の質問ですか? – Kukeltje

関連する問題