2017-05-05 63 views
11

我在Primefaces中遇到<p:fileUpload>问题。起初,我试图在Documentation of Fileupload的片段开始2018页 的是,如果我用的片段,上传功能不叫的第一个问题:Fileupload在Primefaces中不起作用

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> 

我尝试了许多其他片段和解决方案。高级模式,与fileUploadListener,删除在小时ENCTYPE:形式,....

如果我选择mode="simple"ajax="true"功能FileUploadView.upload()结合起来的叫法,但文件始终是NULL。

如果我从<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) 
       { 

       } 
      } 
     } 

如果有人能帮我找到问题,我将不胜感激。

在此先感谢

[编辑]:我试图做一个干净的Spring项目,并尝试了所有的可能性做出<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是访问在该模式下,上传文件的方式,当一个文件被上传 定义fileUploadListener与FileUploadEvent作为处理参数。

使用FileUploadEvent参数添加fileUploadListener。使按钮AJAXical。丢失该型号。不要打扰fileUpload的价值。

+1

所以这是一个'阅读精细手册'的问题? – Kukeltje

相关问题