2012-11-20 14 views
8

Używam PrimeFaces 3.1.2, NetBeans 7.2, JSF 2.1 i GlassFish 3.1.2.FileDownload i FileUpload JSF Primefaces nie działa

Używam rzeczywistego kodu, który otrzymałem od http://www.primefaces.org/showcase/ui/fileUploadAuto.jsf i http://www.primefaces.org/showcase/ui/fileDownload.jsf.

Po uruchomieniu kodu do wysyłania plików nie działa on wcale. Plik nie zostanie przesłany i nie pojawi się komunikat o powodzeniu. Ale jeśli rozmiar pliku przekracza wymieniony rozmiar, pokazuje komunikat, że rozmiar pliku jest zbyt duży.

Oto mój widok:

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

Oto mój podkład fasola:

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

Jest w zasadzie ten sam kod w PrimeFaces zaprezentować stronę.

Podobnie z kodem do pobrania pliku; kiedy klikam na pobieranie nic się nie dzieje. Wyskakujące okienko otwiera się i zamyka, zanim zdołałem to zauważyć. Mam plik obrazu w miejscu, o którym mowa w strumieniu pobierania get (dla części pobierania), ale nie wiem, na czym polega problem. Kod jest zasadniczo taki sam, jak na stronie prezentacyjnej PrimeFaces.

Nie widzę żadnych dzienników ani błędów pod Glassfish w Netbeans. W razie potrzeby nie wiem, jak włączyć rejestrowanie.

+0

Jak wspomina @Askel Willgert, czy Twój komponent bean jest zadeklarowany w faces-config.xml? –

+0

@AlexandreLavoie Witaj Alex Nie sądzę, że potrzebujesz pliku face-config w JSF 2.1 popraw mnie jeśli nie jest zły dla tego ogólnego celu Przykład – Mitra

+0

Oczywiście nie potrzebujesz go, ale nie widzieliśmy żadnych adnotacji, więc myślałem, że może twój komponent został skonfigurowany w face-config. –

Odpowiedz

8

Pierwszą rzeczą, którą trzeba to dodać kilka bibliotek do aplikacji. W rzeczywistości, przesyłanie plików PrimeFaces opiera się na bibliotekach Apache-file-upload i commons-io. Pobrać je i dodać do swojej ścieżki WEB-INF/lib:

można pobrać z poniższego linku.

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

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

dodatkowo trzeba go skonfigurować w 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> 

Także jeśli chcesz ustawić programowo zmienić przeznaczenie przesłanych plików spojrzeć:

PrimeFaces FileUpload File Saving Destination

+0

ŻADNEGO szczęścia Kshitij ive dodał następujące słoiki commons-io-2.4.jar, commons-io-2.4-sources.jar, commons-fileupload-1.2.2.jar wraz z głównymi twarzami, a także zaktualizowany plik web.xml na podstawie kod Również nie widzę śladu stosu do co najmniej debugowania, jest tam sposób na wydrukowanie go. – Mitra

+1

Brak odwzorowania filtra w tej odpowiedzi. Czy dodałeś to? Wszystko szczegółowo opisano w przewodniku użytkownika PrimeFaces. Zobacz także http://stackoverflow.com/questions/8875818/how-to-use-pefefaces-pfileupload-listener-method-is-never-invoked/8880083#8880083 – BalusC

+0

Dziękuję, Balus, że pracował po dodaniu mapowania filtrów również dziękuję bardzo mocno. – Mitra

1

Aby móc używać komponentu bean z xhtml, musisz dodać adnotację do kontrolera jako @ManagedBean i ustawić pewien zakres. Najlepiej w tym przypadku @ViewScoped lub @RequestScoped.

przykład:

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

Dowiedz się więcej o tym, jak udało JSF fasoli pracuje tutaj: http://www.mkyong.com/jsf2/configure-managed-beans-in-jsf-2-0/

+0

Witam Aksel ive zaktualizowałem post ive wypróbowałem z zarządzanym i sesja wciąż nie zmienia się trochę i czy są jakieś zależności, które muszę dodać oprócz rdzeni JSF dodałem tylko primefaces 3.4.2 jar – Mitra

1

Jedną rzeczą, którą zauważyłem jest to, że jeśli nie wstawiasz poprawnie tagu "allowTypes" wyrażenie regularne, element "fileupload" nie uruchamia akcji, co sprawia wrażenie, że akcja jest nieosiągalna.

Wiem, że to nie jest twój problem w tej chwili, ale myślę, że ważne jest, aby udostępnić te informacje.

Powiązane problemy