2016-03-01 59 views
0

我試圖實現primefaces文件上傳,但沒有調用bean方法,順便說一下我使用Spring框架和prettyfaces:Primefaces <P:文件上傳不調用Bean方法

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"> 
    <application> 
     <resource-bundle> 
      <base-name>label</base-name> 
      <var>msg</var> 
     </resource-bundle> 
     <el-resolver>org.springframework.web.jsf.el.SpringBeanFacesELResolver</el-resolver> 
    </application> 
</faces-config> 

web.xml文件:

<?xml version="1.0" encoding="UTF-8"?> 
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns="http://java.sun.com/xml/ns/javaee" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
    http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" 
    version="3.0"> 

    <listener> 
     <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 
    </listener> 

    <context-param> 
     <param-name>contextConfigLocation</param-name> 
     <param-value>/WEB-INF/application-context.xml</param-value> 
    </context-param> 

    <context-param> 
     <param-name>javax.faces.DEFAULT_SUFFIX</param-name> 
     <param-value>.xhtml</param-value> 
    </context-param> 

    <context-param> 
     <param-name>log4j-config-location</param-name> 
     <param-value>WEB-INF/log4j.properties</param-value> 
    </context-param> 
    <listener> 
     <listener-class>co.com.core.commons.LogContextListener</listener-class> 
    </listener> 
    <!-- ############################################# --> 
    <!-- # File upload          # --> 
    <!-- ############################################# --> 
    <filter> 
     <filter-name>PrimeFaces FileUpload Filter</filter-name> 
     <filter-class>org.primefaces.webapp.filter.FileUploadFilter</filter-class> 
     <init-param> 
      <param-name>thresholdSize</param-name> 
      <param-value>2097152</param-value> 
     </init-param> 
    </filter> 

    <filter-mapping> 
     <filter-name>PrimeFaces FileUpload Filter</filter-name> 
     <servlet-name>Faces Servlet</servlet-name> 
     <dispatcher>FORWARD</dispatcher> 
    </filter-mapping> 
    <!-- ############################################# --> 
    <!-- # QUARTZ         # --> 
    <!-- ############################################# --> 
    <!-- listener> 
     <listener-class> 
      org.quartz.ee.servlet.QuartzInitializerListener 
     </listener-class> 
    </listener--> 
    <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>*.xhtml</url-pattern> 
    </servlet-mapping> 
</web-app> 

.xhtml代碼:

<h:form enctype="multipart/form-data" prependId="false"> 
          <p:fileUpload mode="simple" value="#{templateController.file}" /> 
          <p:commandButton value="Upload" actionListener="#{templateController.upload}" ajax="false" /> 
         </h:form> 

豆方法:

public void upload() { 
    FacesMessage msg = new FacesMessage("Success! is uploaded."); 
    FacesContext.getCurrentInstance().addMessage(null, msg); 
} 

我嘗試添加轉發給過濾器,因爲我還使用漂亮的面孔,但仍然沒有工作,謝謝。

+0

託管bean的範圍是什麼? – SAP

+0

它有會話範圍 –

回答

0

好我解決了很多問題,我的解決方案是在web.xml文件中添加一個context-param(primefaces.UPLOADER)(檢查this答案請),這個文件看起來是這樣的,也可能是有幫助的設置項目階段發展(在此文件中註釋),這可以給你相關的調試過程中的一些附加信息:

<?xml version="1.0" encoding="UTF-8"?> 
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns="http://java.sun.com/xml/ns/javaee" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
    http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" 
    version="3.0"> 

    <listener> 
     <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 
    </listener> 

    <!-- context-param> 
      <param-name>javax.faces.PROJECT_STAGE</param-name> 
      <param-value>Development</param-value> 
    </context-param--> 

    <context-param> 
     <param-name>contextConfigLocation</param-name> 
     <param-value>/WEB-INF/application-context.xml</param-value> 
    </context-param> 

    <context-param> 
     <param-name>javax.faces.DEFAULT_SUFFIX</param-name> 
     <param-value>.xhtml</param-value> 
    </context-param> 

    <context-param> 
     <param-name>log4j-config-location</param-name> 
     <param-value>WEB-INF/log4j.properties</param-value> 
    </context-param> 
    <listener> 
     <listener-class>co.com.core.commons.LogContextListener</listener-class> 
    </listener> 
    <!-- ############################################# --> 
    <!-- # File upload          # --> 
    <!-- ############################################# --> 
    <filter> 
     <filter-name>PrimeFaces FileUpload Filter</filter-name> 
     <filter-class>org.primefaces.webapp.filter.FileUploadFilter</filter-class> 
     <init-param> 
      <param-name>thresholdSize</param-name> 
      <param-value>2097152</param-value> 
     </init-param> 
    </filter> 

    <filter-mapping> 
     <filter-name>PrimeFaces FileUpload Filter</filter-name> 
     <servlet-name>Faces Servlet</servlet-name> 
     <dispatcher>FORWARD</dispatcher> 
    </filter-mapping> 

    <context-param> 
     <param-name>primefaces.UPLOADER</param-name> 
     <param-value>commons</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>*.xhtml</url-pattern> 
    </servlet-mapping> 
</web-app> 
0

嘗試執行以下,

此方法添加到你的bean,

public void handleProfileFileUpload(FileUploadEvent event) { 
    if (event != null) { 


     try { 
      InputStream inputStream = event.getFile().getInputstream(); 
      // Set inputstream to your object 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 
} 

刪除命令按鈕並修改類似於這樣的FileUpload配置,fileUploadListener最後經過處理上傳

<p:fileUpload fileUploadListener="#{<your bean>.handleProfileFileUpload}" 
          mode="advanced" sizeLimit="2097152" 
          allowTypes="/(\.|\/)(gif|jpe?g|png)$/" /> 
+0

已經嘗試過,但仍然無法正常工作。 –

+0

您可以在handleProfileFileUpload方法中的事件對象的調試中看到什麼? – SAP

+0

好吧不多說真的,無論是在網絡瀏覽器控制檯都沒有任何的js錯誤 –

0

如果你正在使用Spring MVC,你的過濾器映射應該指向Spring DispatcherServlet而不是Faces Servet。

<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>Spring MVC Servlet</servlet-name> 
</filter-mapping> 
+0

你的意思是Spring MVC? OP沒有使用它。據我所知,使用JSF和MVC同時是一個不錯的選擇(如果有的話,請參閱http://stackoverflow.com/questions/18744910/using-jsf-as-view-technology-of-spring-mvc) – Kukeltje

+0

我使用Spring MVC/Webflow和Primefaces和JPA,沒有任何問題。我不相信這是一個不錯的選擇 當你說「OP不使用它」時,你是什麼意思? –

+0

你使用Spring MVC還是Spring Webflow?兩種不同的技術,如果我閱讀我仔細發佈的鏈接。你可以使用Spring的Webflow與JSF,但並非Spring MVC框架(儘管你可以,如果我正確地讀它運行它們並排)。所以,如果你真的這樣做比這更多的,我會很感興趣,如果有一些代碼公開訪問,看看它是如何實際使用,並可能糾正我發佈的鏈接 – Kukeltje