Загрузить файл PrimeFaces не загружается - PullRequest
1 голос
/ 05 февраля 2012

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

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

Ответы [ 2 ]

0 голосов
/ 28 апреля 2012

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

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

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

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

0 голосов
/ 05 февраля 2012

Я думаю, что эти две библиотеки отсутствуют в вашем проекте; 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 и добавьте свою библиотеку.

...