简体   繁体   中英

p:fileUpload return null value

I have a problem with p:fileUpload. In my Bean it retrieve null value when i up load file. I use PrimeFaces3.5

this is my .xhtml

    xmlns:f="http://xmlns.jcp.org/jsf/core"
    xmlns:p="http://primefaces.org/ui">
    <h:head>
    <title>Facelet Title</title>
    </h:head>
    <h:body>
    <h:form enctype="multipart/form-data">  
        <p:messages showDetail="true"/> 
        <p:panelGrid columns="2">
            <h:outputLabel for="image" value="Select Picture" />
            <p:fileUpload value="#{uploadImage.file}" mode="advance" allowTypes="/(\.|\/)(gif|jpe?g|png)$/"/> 

                <p:commandButton value="Submit" ajax="false" 
                                 action="#{uploadImage.test1()}"/>
        </p:panelGrid>
        </h:form>
    </h:body>
    </html>

And this is UploadImage.java

    package AS_2;
    import java.io.Serializable;
    import javax.faces.application.FacesMessage;
    import javax.faces.bean.ManagedBean;
    import javax.faces.bean.SessionScoped;
    import javax.faces.context.FacesContext;
    import org.primefaces.event.FileUploadEvent;
    import org.primefaces.model.UploadedFile;

    /**
     *
     * @author Mac
     */
    @ManagedBean
    @SessionScoped
    public class UploadImage implements Serializable{
    private UploadedFile file;

        public UploadedFile getFile() {
            return file;
        }

        public void setFile(UploadedFile file) {
            this.file = file;
        }
        /**
         * Creates a new instance of UploadImage
         */

        public void test1() {
        try {
             if (file != null) {
            FacesMessage msg = new FacesMessage("Succesful is uploaded.");
            FacesContext.getCurrentInstance().addMessage(null, msg);
             } else {
            FacesMessage msg = new FacesMessage("failure to upload");
            FacesContext.getCurrentInstance().addMessage(null, msg);
            }
        } catch (Exception e) {
        e.printStackTrace();
           }
        }
        public UploadImage() {
        }

    }

web.xml is like is:

 <?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.1" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd">
    <context-param>
        <param-name>javax.faces.PROJECT_STAGE</param-name>
        <param-value>Development</param-value>
    </context-param>
    <context-param>
        <param-name>javax.faces.CONFIG_FILES</param-name>
        <param-value>/WEB-INF/faces-config.xml</param-value>
    </context-param>
    <servlet>
        <servlet-name>Faces Servlet</servlet-name>
        <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>Faces Servlet</servlet-name>
        <url-pattern>/faces/*</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>Faces Servlet</servlet-name> 
        <url-pattern>*.xhtml</url-pattern> 
    </servlet-mapping>
    <session-config>
        <session-timeout>
            30
        </session-timeout>
    </session-config>
    <welcome-file-list>
        <welcome-file>faces/mainPage.xhtml</welcome-file>
    </welcome-file-list>
    <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>
        <dispatcher>FORWARD</dispatcher>
    </filter-mapping>
    <filter>
        <filter-name>Extensions Filter</filter-name>
        <filter-class>org.apache.myfaces.webapp.filter.ExtensionsFilter</filter-class> 
    </filter>
    <filter-mapping>
        <filter-name>Extensions Filter</filter-name>
        <servlet-name>Faces Servlet</servlet-name>
    </filter-mapping>
    <filter-mapping>
    <filter-name>Extensions Filter</filter-name>
    <url-pattern>/faces/myFacesExtensionResource/*</url-pattern>
    </filter-mapping>
     <filter-mapping>
    <filter-name>Extensions Filter</filter-name>
    <url-pattern>*.jsf</url-pattern>
    </filter-mapping>
    <filter-mapping>
    <filter-name>Extensions Filter</filter-name>
    <url-pattern>*.xhtml</url-pattern>
    </filter-mapping>
  </web-app>

and this is my faces-config.xml

    <?xml version='1.0' encoding='UTF-8'?>
<faces-config version="2.2"
    xmlns="http://xmlns.jcp.org/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-facesconfig_2_2.xsd">
    <render-kit>
        <renderer>
            <component-family>org.primefaces.component</component-family>
            <renderer-type>org.primefaces.component.FileUploadRenderer</renderer-type>
            <renderer-class>AS_2.MyFileUploadRenderer</renderer-class>
        </renderer>
    </render-kit>

</faces-config>

please hlep me with this.

<p:fileUpload value="#{uploadImage.file}" 
mode="advance" allowTypes="/(\.|\/)(gif|jpe?g|png)$/"/> 

In your code, you're missing fileUploadListener . Add to your code above as :

 <p:fileUpload value="#{uploadImage.file}" 
   fileUploadListener="#{uploadImage.handleFileUpload}"
   mode="advance" allowTypes="/(\.|\/)(gif|jpe?g|png)$/"/> 

Then in your UploadImageBean ,

public void handleFileUpload(FileUploadEvent event) {  
        this.file=event.getFile();
    }  

You cannot just have value in p:fileUpload , you need fileUploadListener too. I hope that helps.

You have the file upload filter commented in the web.xml file.

Uncomment these lines.

<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>
    <dispatcher>FORWARD</dispatcher>
</filter-mapping>

Also, if you are using the advanced mode don't use the value attribute, as you manage the uploaded file in the listener.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM