2013-10-04 10 views
6

के साथ प्राइमफेसेस 3.5 में ईवेंट नहीं चलाता है, मैं ईवेंट को आग लगाने के लिए प्राइमफेसेस 3.5 पर फ़ाइल अपलोड नहीं कर सकता। मैंने उस विषय के बारे में कई पोस्ट पढ़ी हैं और वहां सलाह दी है लेकिन फिर भी यह काम नहीं करता है। मैंने बिना किसी सफलता के सभी मोड (सरल, ऑटो, उन्नत) की कोशिश की।fileUpload जेएसएफ 2.2

यदि मैं जेएसएफ विनिर्देश से मानक इनपुटफाइल टैग का उपयोग करता हूं तो यह ठीक से काम करता है।

यह मेरा web.xml फ़ाइल है:

<?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>primefaces.THEME</param-name> 
    <param-value>redmond</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> 

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

<session-config> 
    <session-timeout> 
     30 
    </session-timeout> 
</session-config> 
<welcome-file-list> 
    <welcome-file>faces/home.xhtml</welcome-file> 
</welcome-file-list> 
</web-app> 

और यह FileUpload टैग के साथ मेरे विचार पेज का हिस्सा है:

<h:form enctype="multipart/form-data"> 
    <p:dialog id="basicDialog" header="Add pictures" widgetVar="dlg1" > 
     <p:fileUpload fileUploadListener="#{galleryManagedBean.addPicturesToGallery}" multiple="true"/> 
    </p:dialog> 
</h:form> 

विधि है कि कहा जाता है के साथ प्रबंधित सेम से निकालने टैग से:

@Named(value = "galleryManagedBean") 
@RequestScoped 
public class GalleryManagedBean { 
    public void addPicturesToGallery(FileUploadEvent event) 
    { 
     System.out.println("Triggered upload"); 
    } 
} 

मैं यह भी जोड़ना चाहता हूं कि एचटीपी पोस्ट अनुरोध ठीक से निकाल दिया गया है I क्रोम में डीबगर उपकरण का उपयोग करके इसे चेक किया।

commons-fileupload-1.3.jar 
commons-io-2.4.jar 
+1

पीएफ 3.5 विशेष रूप से जेएसएफ 2.0/2.1 के लिए विकसित किया गया है और जेएसएफ 2.2 के साथ काम करने की गारंटी नहीं है। पीएफ 4.0 विशेष रूप से जेएसएफ 2.2 के लिए/विकसित किया गया है और इसे संयोग से 2 दिन पहले जारी किया गया है। मैं इसे एक कोशिश देने का सुझाव देता हूं। – BalusC

+0

बिंगो! यह पीएफ 4.0 के साथ ठीक से काम करता है। धन्यवाद @ बाल्लूसी! – bajer83

+0

ग्रेट। मैंने थोड़ा और शोध किया और एक उत्तर पोस्ट किया। – BalusC

उत्तर

6

यह JSF 2.2 के FacesServlet में बदलाव के कारण होता है:

मैं classpath अर्थात करने के लिए आवश्यक पुस्तकालयों जोड़ लिया है। उस संस्करण के बाद से, FacesServlet मूल रूप से फ़ाइल अपलोड का समर्थन करता है (विशेष रूप से: multipart/form-data HTTP अनुरोध) नए सर्वलेट 3.0 विशिष्ट @MultipartConfig एनोटेशन की उपस्थिति के लिए धन्यवाद। साथ ही, मानक JSF घटक सेट में फ़ाइल अपलोड घटक प्रदान करने के लिए एक नया <h:inputFile> घटक पेश किया गया था।

यह प्राइमफेस फ़ाइल अपलोड सुविधा के साथ सभी प्राइमफेस 3.x संस्करणों में फ़ाइल सुविधा है जो इस नई जेएसएफ 2.2 सुविधा को बिल्कुल ध्यान में नहीं लेता है। प्राइमफेसेस 3.x फ़ाइल अपलोड फ़िल्टर ने पूरे अनुरोध को पार्स किया और उपभोग किया, जबकि इसे इस नौकरी को FacesServlet पर छोड़ देना चाहिए। इसने HTTP अनुरोध को उचित रूप से डीकोड करने में असमर्थ होने के लिए FacesServlet का कारण बनता है (सबमिट किए गए मानों और कार्यों को निर्धारित करना)।

प्राइमफ़ेस 4.0, जिसे विशेष रूप से जेएसएफ 2.2 के लिए डिज़ाइन किया गया है, ने इसे सभी को ध्यान में रखा है। प्राइमफेस फ़ाइल अपलोड फ़िल्टर के this changeset में आप जेएसएफ 2.2 को पहचानने के लिए किए गए परिवर्तन देख सकते हैं और फ़िल्टर में पार्सिंग को बाईपास कर सकते हैं। सैद्धांतिक रूप से, यह web.xml से फ़ाइल अपलोड फ़िल्टर पंजीकरण को पूरी तरह से निकालने के लिए पर्याप्त होना चाहिए ताकि इसका उपयोग अब और नहीं किया जा सके।

यदि आप प्राइमफ़ेस 4.0 में अपग्रेड करते हैं तो यह ठीक काम करना चाहिए। इसे संयोग से 2 दिन पहले आधिकारिक तौर पर जारी किया गया था, इसलिए आप इसके लिए समय पर सुंदर हैं।