2017-05-05 12 views
11

में फ़ाइलअपलोड काम नहीं करता है मुझे प्राइमफ़ेस में <p:fileUpload> के साथ कुछ समस्याएं हैं।प्राइमफ़ेस

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

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

एचटीएमएल:

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

मैं पहले तो मुझे Documentation of Fileupload में स्निपेट पेज 2018 से शुरू होने वाले पहले अंक था कि अगर मैं स्निपेट का उपयोग करके अपलोड प्रकार्य नहीं बुलाया जाता है की कोशिश की कई अन्य स्निपेट और समाधान की कोशिश की है। उन्नत मोड, fileUploadListener साथ, ज में enctype नष्ट कर दिया: फार्म, ....

अगर मैं mode="simple" चुनें और ajax="true" समारोह FileUploadView.upload() के साथ संयोजित कहा जाता है, लेकिन फाइल हमेशा शून्य है।

यदि मैं <h:form> से enctype को हटाता हूं, तो फ़ंक्शन FileUploadView.upload() फ़ंक्शन कहा जाता है, लेकिन फ़ाइल हमेशा शून्य होती है।

मैं ऊपर दिए गए मुद्दों का उल्लेख करता हूं, क्योंकि यह काम नहीं करना चाहिए, क्योंकि मैंने इस मंच पर सभी संभावित समाधान पढ़े हैं। मैंने सभी सुझाए गए dependencies और context-params और filter को भी जोड़ा, लेकिन यह काम नहीं करता है।

यहाँ मैं अपने pom.xml, web.xml और पूर्ण जावा कोड पोस्ट करेंगे: 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) 
       { 

       } 
      } 
     } 

अगर कोई समस्या ढूंढने में मेरी मदद कर सकता है तो मैं सराहना करता हूं।

अग्रिम धन्यवाद

[संपादित करें]: मैं एक साफ वसंत परियोजना करने की कोशिश की है और एक <p:fileUpload> बनाने के लिए संभावनाओं के सभी की कोशिश की है, लेकिन उनमें से कोई भी काम किया है। लेकिन मैंने अपने ब्राउज़र के यातायात को देखा, और मुझे कुछ रोचक मिला: Traffic after I uploaded the File with advanced। अपलोडबटन दबाए जाने के बाद पोस्ट स्टेटमेंट तुरंत दिखाई देता है, अन्य जीईटी 1-2 सेकंड बाद दिखाई देते हैं।

+0

@ बाल्लूसी आपके उत्तर के लिए धन्यवाद। मैंने कुछ दिन पहले एक नई स्प्रिंग प्रोजेक्ट बनाने की कोशिश की है और मैंने आपके द्वारा पोस्ट की गई साइट पर आपके निर्देशों का पालन किया है, लेकिन समस्या हल नहीं हुई थी। मैं वसंत के बिना एक नया जेएसएफ परियोजना बनाने की कोशिश करूंगा और मैं आपको परिणाम बता दूंगा। –

+0

@ बालससी "स्प्रिंग एक कस्टम स्कोप के साथ संदिग्ध लग रहा है" के साथ आपका क्या मतलब है? –

+0

@ बालससी मैंने वसंत के बिना एक नई परियोजना शुरू करने की कोशिश की है, लेकिन मैं इस फ़ाइल अपलोड को काम पर लाने में सक्षम नहीं हूं। यहां तक ​​कि नई परियोजना में व्यवहार ऊपर वर्णित जैसा ही है। –

उत्तर

1

प्रलेखन कहते हैं

उन्नत फ़ाइल अपलोड

FileUploadListener इस मोड में अपलोड की गई फ़ाइलों का उपयोग करने के तरीका है, जब एक फ़ाइल अपलोड की गई है परिभाषित fileUploadListener के रूप में एक FileUploadEvent के साथ कार्रवाई की है पैरामीटर।

फ़ाइल अपलोड करें FileUploadEvent पैरामीटर के साथ फ़ाइल अपलोड करें। बटन AJAXical बनाओ। Enctype खोना। FileUpload के मान से परेशान न हों।

+1

तो यह 'ठीक मैनुअल' प्रश्न है? – Kukeltje

संबंधित मुद्दे