2012-04-08 19 views
1

Ich habe acefaces Datatable mit Dateinamen, einer für Zeile und ich versuche, einen Download-Button mit Ice: outputResource, aber ich schicke den Dateinamen zu outputResourceBean .ICE Faces - Senden von Dateiname Parameter an Bean aus Eis: outputResource

Meine Datentabelle sieht aus wie:

<h:form id="exportedFiles"> 
     <ace:dataTable value="#{exportBean.allFiles}" var="upload" 

        <ace:column> 
         <f:facet name="header" > 
          <h:outputText value="Název souboru"/> 
         </f:facet>  
         <h:outputText value="#{upload.name}"/> 
        </ace:column> 

        <ace:column> 
         <f:facet name="header" > 
          <h:outputText value="Dowload file"/> 
         </f:facet>  
         <ice:outputResource id="downLink" 
              resource="#{outputResource.pdfResource}" 
              attachment="true" 
              label="Download PDF" 
              type="button"> 
         </ice:outputResource> 
        </ace:column> 
       </ace:dataTable> 
      </h:form> 

Und meine Bohne sieht wie folgt aus:

public static final String PDF_NAME = "Download_PDF.pdf"; 
public static final Resource PDF_RESOURCE = new MyResource(PDF_NAME); 
public String getPdfName() { return PDF_NAME; } 
public Resource getPdfResource() { return PDF_RESOURCE; } 

ich den Dateinamen # mit bekommen kann {upload.name} aber ich habe keine Ahnung, wie senden es zu Bean, wenn Sie auf die Schaltfläche Download klicken ...

Vielen Dank für Hilfe im Voraus!

Antwort

0

Sie können Ihre Liste, die die Dateien enthält, in eine ListDataModel umbrechen. Damit können Sie auf die Daten des aktuell ausgewählten Zeilenindex zugreifen.

@ManagedBean 
@ViewScoped 
public class ExportBean { 

    private ListDataModel<MyResource> allFiles; 

    public ListDataModel<MyResource> getAllFiles() { 
     if (allFiles == null) { 
      List<MyResource> files = new ArrayList<MyResource>(); 
      files.add(new MyResource("doc1.pdf")); 
      files.add(new MyResource("doc2.pdf")); 
      files.add(new MyResource("doc3.pdf")); 
      files.add(new MyResource("doc4.pdf")); 
      files.add(new MyResource("doc5.pdf")); 
      allFiles = new ListDataModel<MyResource>(files); 
     } 
     return allFiles; 
    } 

    public String getPdfName() { 
     // add the getResourceName method to MyResource 
     return allFiles.getRowData().getResourceName(); 
    } 

    public Resource getPdfResource() { 
     return allFiles.getRowData(); 
    } 
} 

Und die xhtml Seite würde wie folgt aussehen:

<h:form id="exportedFiles"> 
    <ace:dataTable value="#{exportBean.allFiles}"> 
     <ace:column> 
      <h:outputText value="#{exportBean.pdfName}" /> 
     </ace:column> 
     <ace:column> 
      <ice:outputResource resource="#{exportBean.pdfResource}" attachment="true" label="Download PDF" type="button" /> 
     </ace:column> 
    </ace:dataTable> 
</h:form> 
+0

Danke, sehr hilfreich! –