JSF PrimeFaces Dateidownload-problem

Ich bin mit PrimeFaces für ein neues Projekt und es ist schon eine beeindruckende Reihe von Komponenten.
Wie auch immer, ich habe ein problem mit der "realen Welt" verwenden des filedownload-Komponente.
In meiner Seite ich habe eine datalist zeigt, dass die Anhänge, die auf ein bestimmtes Dokument, und ich möchte einen link zum direkt-download, die Datei innerhalb des datalist-Element.
Hier ist mein xhtml code:

<p:dataList id="ListaAllegati" value="#{documentBean.documento.allegati}" type="definition" var="attach" style="border: none" ">            
   <f:facet name="description">
      <h:outputText value="#{attach.name}" />                  
      <p:commandLink ajax="false" title="Download" action="#{documentBean.selectAttach}>  
         <h:graphicImage style="margin-left: 10px; border: none" value="./images/article.png" height="24" width="24" ></h:graphicImage>
         <p:fileDownload value="#{documentBean.downloadFile}"/>
         <f:setPropertyActionListener target="#{documentBean.selectedAttach}" value="#{attach}" />
      </p:commandLink>
   </f:facet>
</p:dataList>

und die relative java bean (request-scoped):

private StreamedContent downloadFile;

public StreamedContent getDownloadFile() {      
    log.info("getter dell'allegato invocato");
    InputStream stream = null;
    byte[] rawFile = null;
    if (selectedAttach == null) {
        log.warn("Nessun allegato passato");
        return null;
    } else {
        try {
            log.info("Recupero del file " + selectedAttach.getGuid());
            rawFile = attachManager.retrieveFile(selectedAttach.getGuid());
        } catch (Exception e) {
            String msg = "Errore durante il recupero del file";
            log.error(msg, e);
            FacesMessage fmsg = new FacesMessage(msg, "");
            FacesContext.getCurrentInstance().addMessage(null, fmsg);
        }
        stream = new ByteArrayInputStream(rawFile);
        DefaultStreamedContent file = new DefaultStreamedContent(stream,
                selectedAttach.getMimeType(), selectedAttach.getName());
        return file;
    }
}

public void selectAttach() {
    log.info("commandLink action invocata");        
}

private Allegato selectedAttach;

public Allegato getSelectedAttach() {
   return selectedAttach;
}

public void setSelectedAttach(Allegato selectedAttach) {
   log.info("Allegato selezionato");
   if (selectedAttach==null) log.warn("L'allegato passato è nullo");
   this.selectedAttach = selectedAttach;
}

So, paar Frage:

  1. Bin ich das richtige zu tun versucht, übergeben Sie die ausgewählte Anlage, die Art und Weise? Ansonsten, wie kann ich ein parameter übergeben werden, sagen die Bohne wich-Anhang angeklickt wurde?
  2. Warum ich das erste mal auf der Kommandozeile link, nichts passieren? Sie machen eine Rundfahrt mit dem server, aber es passiert nichts. Zum zweiten mal, es gibt mir eine Ausnahme.
  3. Warum documentBean.selectAttach wird nie genannt und die documentBean.selectedAttach Eigenschaft ist nie (auch nicht beim zweiten mal)?

Danke an alle für jeden Hinweis

InformationsquelleAutor themarcuz | 2011-06-01

Schreibe einen Kommentar