Wie das herunterladen einer Datei in einer Datenbank gespeichert, die mit JSF 2.0

Muss ich das herunterladen einer Datei in einer Datenbank gespeichert. Ich glaube, ich habe richtig die Abfrage und nannte es, ich weiß nur nicht, wie kann ich schließen Sie es an eine Schaltfläche in einer JSF-Seite.
Auch Frage ich mich, muss ich speichern, das Bild in einem Ordner auf dem server vor der übergabe an die JSF-Seite. Wenn ja, Wie kann ich das machen?

Dies ist die Abfrage, die ich verwenden, um die return das byte[] von der db:

@NamedQuery(name = "downloadGarbage", query = "SELECT g.file FROM Garbage g WHERE g.id :idParam")
@Entity
public class Garbage implements Serializable {
@Lob
@Column(nullable = false)
private byte[] file;
....

Hier ist eine einfache EJB, die fordert, dass die Abfrage dann die id:

@Stateless(name = "ejbs/FileDownloaderEJB")
public class FileDownloaderEJB implements IFileDownloaderEJB {

@PersistenceContext
private EntityManager em;

public byte[] downloadGarbage(Long id) {
    Query query = em.createNamedQuery("downloadGarbage");
    query.setParameter("idParam", id);

    Object o = query.getSingleResult();
    byte[] tmpArray = (byte[]) o; 
    return tmpArray;
}

Nun ist dies der Teil, der mich verwirrt, wie kann ich das oben mit der JSF-Seite und managed bean?

@ManagedBean
@RequestScoped
public class DownloadController {

@EJB
private FileDownloaderEJB fileDownloaderEJB;

    ...

    private Garbage garbage;

public void startDownload(Long id) {
    fileDownloaderEJB.downloadGarbage(id);
//HOW TO START THE DOWNLOAD?
//Other Get Set Methods...

}

}

Auch wie kann ich den pass, die lange id der managedBean aus der JSF aus einem commandButton? Ist das erlaubt?

<!-- How to pass the value of id from -->
<h:commandButton action="downloadController.startDownload(#{garbage.id})">
InformationsquelleAutor sfrj | 2011-03-31
Schreibe einen Kommentar