2012-11-20 19 views
8

PrimeFaces 3.1.2, NetBeans 7.2, JSF 2.1 ve GlassFish 3.1.2 kullanıyorum.FileDownload ve FileUpload JSF Primefaces çalışmıyor

http://www.primefaces.org/showcase/ui/fileUploadAuto.jsf ve http://www.primefaces.org/showcase/ui/fileDownload.jsf'dan aldığım asıl kodu kullanıyorum.

Dosya yükleme kodunu çalıştırdığımda, hiç çalışmıyor. Dosya yüklenmiyor ve başarı mesajı gösterilmiyor. Ancak dosya boyutu belirtilen boyutu aşarsa, dosya boyutunun çok büyük olduğunu belirten bir ileti görüntülenir. PrimeFaces içinde

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); 
    } 
} 

Onun temelde aynı kod sayfasını vitrin:

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

İşte benim arka fasulye geçerli:

İşte benim görünümüdür.

Dosya indirme koduyla benzer şekilde; indirmeye tıkladığımda hiçbir şey olmuyor. Bir pop up, fark edemeden önce açılır ve kapanır. Resim kaynağına, get kaynak akışında (indirme kısmı için) bahsedildiği gibi var, ama sorunun ne olduğunu bilmiyorum. Kod ayrıca temel olarak PrimeFaces vitrin sayfasında olduğu gibidir.

Netbeans'de Glassfish altında herhangi bir kayıt veya hata göremiyorum. Ayrıca gerekirse günlüğe kaydetmeyi nasıl etkinleştireceğimi bilmiyorum.

+0

As @ Askel Willgert'den bahsediliyor, fasulyeniz faces-config.xml dosyasında bildirildi mi? –

+0

@AlexandreLavoie Merhaba Alex JSF 2.1'de bir face-config dosyasına ihtiyacınız olduğunu düşünmüyorum. Bu genel amaçlı örnek için yanılmıyorsanız beni düzeltin – Mitra

+0

İhtiyacın olmadığından emin olun, ancak herhangi bir ek açıklama görmedik. Belki de fasulyeniz yüzler konfigürasyonunda yapılandırıldı. –

cevap

8

Eğer gereken ilk şey uygulamanıza bazı kütüphaneler ekleyin:

@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 yönetilen fasulye burada nasıl çalıştığı konusunda daha fazla bilgi edinin. Nitekim, PrimeFaces dosya yükleme Apache commons-file-upload ve commons-io kütüphanelerine dayanmaktadır. Bu nedenle onları boşaltın ve WEB-INF/lib yolunuza ekleyin:

aşağıdaki linkten indirebilirsiniz. programlı set yüklenen dosyaların hedefini değiştirmek istediğiniz bir göz varsa ek olarak

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

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

Eğer

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

Ayrıca web.xml''deki içine yapılandırmak zorunda:

PrimeFaces FileUpload File Saving Destination

+0

NO şanslar Kshitij ive asal yüzlerle birlikte commons-io-2.4.jar, commons-io-2.4-sources.jar, commons-fileupload-1.2.2.jar kayıtlarını ve aynı zamanda web.xml dosyasını temel alarak güncellenmiş. code Ayrıca, en az hata ayıklama için herhangi bir yığın izi göremiyorum, onu yazdırmanın bir yolu var – Mitra

+1

Filtre eşleştirmesi bu yanıtta eksik. Ekledin mi Hepsi PrimeFaces kullanıcı kılavuzunda açıklanan ayrıntılı. Ayrıca bkz. Http://stackoverflow.com/questions/8875818/how-to-use-primefaces-pfileupload-listener-method-is-never-invoked/8880083#8880083 – BalusC

+0

Ayrıca, filtre eşlemesi ekledikten sonra işe yaradığı için teşekkür ederiz. – Mitra

1

Fasulyeyi xhtml'den kullanabilmek için, denetleyicinizi @ManagedBean olarak ek açıklama eklemeniz ve bazı kapsamı ayarlamanız gerekir. Tercihen @ViewScoped veya @RequestScoped bu durumda.

örnek: http://www.mkyong.com/jsf2/configure-managed-beans-in-jsf-2-0/

+0

Merhaba Aksel ive yönetilen ile denedim güncellendi ve oturum hala biraz değişmez ve çekirdek JSF ayrı eklemek zorunda herhangi bir bağımlılık var sadece primefaces 3.4.2 jar ekledim – Mitra

1

Fark ettiğim bir şey, "allowTypes" etiketini normal ifadeyi doğru bir şekilde koymazsanız, "dosya yükleme" öğesi eylemi tetiklemez ve eylemin ulaşılamayacağı izlenimi verir.

Bunun şu anda sizin sorununuz olmadığını biliyorum, ancak bu bilgilerin paylaşılmasının önemli olduğunu düşünüyorum.