2012-02-05 4 views
1

Я использую PrimeFaces 3 и пытаюсь загрузить файл, но когда я отлаживаю файл, всегда имеет значение null. Ниже вы можете увидеть мой код. Может ли кто-нибудь определить, в чем проблема?PrimeFaces Загрузить файл не загружается

<h:form enctype="multipart/form-data"> 

     <p:fileUpload value="#{uploadFileMB.file}" mode="simple" /> 
     <p:commandButton value="Submit" ajax="false" action="#{uploadFileMB.submit()}"/> 
     <h:outputLabel value="#{uploadFileMB.text}" /> 

</h:form> 



import javax.enterprise.context.SessionScoped; 
    import javax.faces.bean.ManagedBean; 
    import javax.faces.bean.RequestScoped; 
    import org.primefaces.model.UploadedFile; 


    @ManagedBean 
    @SessionScoped 
    public class UploadFileMB { 
    UploadedFile file; 
    String text; 

     public String getText() { 
      return text; 
     } 

     public void setText(String text) { 
      this.text = text; 
     } 


     public UploadedFile getFile() { 
      return file; 
     } 

     public void setFile(UploadedFile file) { 
      this.file = file; 
     } 

     public void submit(){ 


     System.out.println("Trial "+file); 
     UploadedFile a=file; 
     if(file==null) 
      text="not uploaded"; 
     else 
      text=file.getFileName()+" uploaded"; 
       } 
     /** Creates a new instance of UploadFileMB */ 
     public UploadFileMB() { 
     } 
    } 



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

И фильтр в обоих web.xml и faces.config Я попытался ряд предложений и отлажен его много раз, но я не могу понять это.

Это мой лица-конфигурации:

<?xml version='1.0' encoding='UTF-8'?> 

<!-- =========== FULL CONFIGURATION FILE ================================== --> 

<faces-config version="2.0" 
    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-facesconfig_2_0.xsd" 
    > 
     <dependency> 
      <groupId>commons-fileupload</groupId> 
      <artifactId> commons-fileupload</artifactId> 
      <version>1.2.2</version> 
     </dependency> 
     <dependency> 
      <groupId>commons-io</groupId> 
      <artifactId> commons-io</artifactId> 
      <version>2.1</version> 
     </dependency> 
<lifecycle> 
<phase-listener>security.SecurityFilter</phase-listener> 
</lifecycle> 


<filter> 
    <filter-name>PrimeFaces FileUpload Filter</filter-name> 
    <filter-class>org.primefaces.webapp.filter.FileUploadFilter</filter-class> 
    <init-param> 
     <param-name>uploadDirectory</param-name> 
     <param-value>C:/home/vanessa/Desktop</param-value> 
    </init-param> 
</filter> 
<filter-mapping> 
    <filter-name>PrimeFaces FileUpload Filter</filter-name> 
    <servlet-name>Faces Servlet</servlet-name> 
</filter-mapping> 



</faces-config> 

ответ

0

Я думаю, что эти две библиотеки отсутствуют в проекте; commons-fileupload и commons-io. если ваш проект является maven, вы можете добавить их в свой pom.xml;

 <dependency> 
      <groupId>commons-fileupload</groupId> 
      <artifactId> commons-fileupload</artifactId> 
      <version>1.2.1</version> 
     </dependency> 
     <dependency> 
      <groupId>commons-io</groupId> 
      <artifactId> commons-io</artifactId> 
      <version>2.1</version> 
     </dependency> 

еще затем загрузить их из http://commons.apache.org и добавить свою библиотеку.

+0

Спасибо. Но это не работает. У меня нет maven, поэтому я только что добавил банки и код, который вы написали выше, но он по-прежнему не работает. Другие предложения? Еще раз спасибо! – Viola

+0

ваш управляемый bean-компонент должен реализовывать Serializable, может быть, он исправляет вашу ошибку. – Jman

+0

Спасибо. Я добавил «реализует serializable», но он все равно не работает. Любые другие ides? Я добавил к своему вопросу мои лица-config. – Viola

0

Ну, я вижу три ошибки в вашем коде, это может решить вашу проблему. Я ничего не гарантирую.

Во-первых, вы импортируете @SessionScope из неправильной упаковки, это должно быть javax.faces.bean.SessionScoped, другой класс предназначен для использования с CDI.

Во-вторых, сделайте свои свойства в bean-компоненте private Я не уверен, что он считает это свойством. Также это хорошая практика скрыть поле как можно больше.

В-третьих, и самое главное, измените action на actionListener и попробуйте. Если все еще не работает, попробуйте добавить к вашему параметру метода ActionEvent event (и будьте осторожны, чтобы выбрать правильный пакет, я однажды импортировал ActionEvent из javax.awt. и потратил два часа на выяснение, где может быть проблема :-)

Смежные вопросы