2012-11-20 15 views
8

काम नहीं कर रहा है मैं प्राइमफेस 3.1.2, नेटबीन 7.2, जेएसएफ 2.1 और ग्लासफ़िश 3.1.2 का उपयोग कर रहा हूं।फ़ाइलडाउनलोड और फ़ाइल अपलोड करें जेएसएफ प्राइमफेस

मैं http://www.primefaces.org/showcase/ui/fileUploadAuto.jsf और http://www.primefaces.org/showcase/ui/fileDownload.jsf से प्राप्त वास्तविक कोड का उपयोग कर रहा हूं।

जब मैं फ़ाइल अपलोड कोड चलाता हूं, तो यह बिल्कुल काम नहीं करता है। फ़ाइल अपलोड नहीं होती है और कोई सफलता संदेश नहीं दिखाया जाता है। लेकिन यदि फ़ाइल का आकार उल्लिखित आकार से अधिक है, तो यह एक संदेश दिखा रहा है कि फ़ाइल का आकार बहुत बड़ा है।

package com; 

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; 

@ManagedBean 
@SessionScoped 
public class FileUploadController { 
    public void handleFileUpload(FileUploadEvent event) { 
     FacesMessage msg = new FacesMessage("Succesful", event.getFile().getFileName() + " is uploaded."); 
     FacesContext.getCurrentInstance().addMessage(null, msg); 
    } 
} 

इसका मूल रूप से PrimeFaces में एक ही कोड के प्रदर्शन के पेज:

<?xml version='1.0' encoding='UTF-8' ?> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" 
    xmlns:h="http://java.sun.com/jsf/html" 
    xmlns:f="http://java.sun.com/jsf/core" 
    xmlns:p="http://primefaces.org/ui"> 
    <h:head> 
    </h:head> 
    <h:body> 
     <h:form enctype="multipart/form-data"> 
      <p:fileUpload fileUploadListener="#{fileUploadController.handleFileUpload}" 
       mode="advanced" 
       update="messages" 
       auto="true" 
       sizeLimit="100000" 
       allowTypes="/(\.|\/)(gif|jpe?g|png)$/"/> 
      <p:growl id="messages" showDetail="true"/> 
     </h:form> 
    </h:body> 
</html> 

यहाँ मेरी समर्थन सेम है:

यहाँ मेरे विचार है।

इसी तरह फ़ाइल डाउनलोड कोड के साथ; जब मैं डाउनलोड पर क्लिक करता हूं तो कुछ भी नहीं होता है। इससे पहले कि मैं इसे भी देख सकूं, एक पॉप अप खुलता है और बंद हो जाता है। मेरे पास संसाधन फ़ाइल (डाउनलोड भाग के लिए) में उल्लिखित छवि फ़ाइल है, लेकिन मुझे नहीं पता कि समस्या क्या है। कोड मूल रूप से प्राइमफेस शोकेस पेज जैसा ही है।

मुझे नेटबीन्स में ग्लासफ़िश के तहत कोई भी लॉग या त्रुटियां नहीं दिखाई देती हैं। मुझे यह भी नहीं पता कि अगर आवश्यक हो तो लॉगिंग को कैसे सक्षम किया जाए।

+0

@Askel Willgert के रूप में उल्लेख किया गया है, क्या आपकी बीन चेहरे-config.xml में घोषित है? –

+0

@AlexandreLavoie हैलो एलेक्स मुझे नहीं लगता कि आपको जेएसएफ 2.1 में चेहरे-कॉन्फ़िगरेशन फ़ाइल की आवश्यकता है, अगर मैं इस सामान्य उद्देश्य उदाहरण के लिए गलत हूं तो मुझे सही करें उदाहरण – Mitra

+0

निश्चित रूप से आपको इसकी आवश्यकता नहीं है, लेकिन हम कोई टिप्पणी नहीं देख रहे थे, इसलिए मैं सोच रहा था शायद आपकी बीन चेहरे-कॉन्फ़िगरेशन में कॉन्फ़िगर किया गया था। –

उत्तर

8

पहली बात आप की जरूरत अपने आवेदन करने के लिए कुछ पुस्तकालयों को जोड़ने है:

@ManagedBean 
@ViewScoped 
public class FileUploadController { 

    public void handleFileUpload(FileUploadEvent event) { 
     FacesMessage msg = new FacesMessage("Succesful",  event.getFile().getFileName() + " is uploaded."); 
     FacesContext.getCurrentInstance().addMessage(null, msg); 
    } 
} 

कैसे JSF कामयाब सेम यहाँ काम करता है के बारे में अधिक जानें। वास्तव में, प्राइमफेस फ़ाइल अपलोड अपाचे कॉमन्स-फ़ाइल-अपलोड और कॉमन्स-आईओ पुस्तकालयों पर निर्भर करता है। तो उन्हें डॉउलोड करें और उन्हें अपने वेब-आईएनएफ/lib पथ में जोड़ें:

आप इसे निम्न लिंक से डाउनलोड कर सकते हैं।

http://commons.apache.org/io/

http://commons.apache.org/fileupload/

अलावा आप आप प्रोग्राम सेट अपने अपलोड की गई फ़ाइलों के गंतव्य को बदलना चाहते हैं एक नजर है, तो web.xml में यह कॉन्फ़िगर करने के लिए

<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>51200</param-value> 
    </init-param> 
    <init-param> 
    <param-name>uploadDirectory</param-name> 
    <param-value>C:\etc</param-value> 
    </init-param> 
</filter> 
<filter-mapping> 
    <filter-name>PrimeFaces FileUpload Filter</filter-name> 
    <servlet-name>Faces Servlet</servlet-name> 
</filter-mapping> 

भी है:

PrimeFaces FileUpload File Saving Destination

+0

कोई किस्मत क्षितिज आईव ने निम्नलिखित जार कॉमन्स-io-2.4.jar, कॉमन्स-आईओ-2.4-स्रोत.जर, कॉमन्स-फाइलअपलोड-1.2.2.जर को प्रमुख चेहरों के साथ जोड़ा और आपके द्वारा आधारित वेब.एक्सएमएल को भी अपडेट किया कोड भी मैं कम से कम डीबग करने के लिए कोई स्टैक ट्रेस नहीं देख सकता, इसे प्रिंट करने का कोई तरीका है – Mitra

+1

फ़िल्टर मैपिंग इस उत्तर से गायब है। क्या आपने इसे जोड़ा है? प्राइमफेस उपयोगकर्ता की मार्गदर्शिका में वर्णित यह सब कुछ विस्तार से है। यह भी देखें http://stackoverflow.com/questions/8875818/how-to-use-primefaces-pfileupload-listener-method-is-never-invoked/8880083#8880083 – BalusC

+0

धन्यवाद फ़िल्टरिंग मैपिंग जोड़ने के बाद भी यह काम करता है धन्यवाद बहुत अधिक – Mitra

1

एक्सएचटीएमएल से बीन का उपयोग करने में सक्षम होने के लिए, आपको अपने नियंत्रक को @ManagedBean के रूप में एनोटेट करने और कुछ दायरे सेट करने की आवश्यकता है। इस मामले में अधिमानतः @ViewScoped या @RequestScoped।

उदाहरण: http://www.mkyong.com/jsf2/configure-managed-beans-in-jsf-2-0/

+0

हैलो अकसेल आईव ने पोस्ट आईव को अपडेट किया है, प्रबंधित और सत्र के साथ अभी भी थोड़ा बदलाव नहीं हुआ है और क्या कोई निर्भरता है कि मुझे कोर जेएसएफ से अलग करना है, मैंने केवल प्राइमफेस 3.4.2 जार जोड़ा है – Mitra

1

एक बात जो मैंने देखी है वह यह है कि यदि आप "allowTypes" टैग को नियमित रूप से अभिव्यक्ति के अंदर नहीं डालते हैं, तो "fileupload" तत्व क्रिया को ट्रिगर नहीं करता है, यह इंप्रेशन देता है कि कार्रवाई पहुंच योग्य नहीं है।

मुझे पता है कि यह अभी आपकी समस्या नहीं है, लेकिन मुझे लगता है कि यह जानकारी साझा करना महत्वपूर्ण है।