Мне нужно скачать файл, хранящийся в базе данных.Я думаю, что правильно сделал запрос и назвал его, я просто не знаю, как я могу подключить это к кнопке на странице JSF.Также мне интересно, нужно ли сохранять это изображение в папке на сервере, прежде чем передавать его на страницу JSF.Если так, как я могу это сделать?
Это запрос, который я использую для возврата байта [] из базы данных:
@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;
....
Вот простой EJB, который затем вызывает этот запросполучить идентификатор:
@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;
}
Теперь эта часть меня смущает, как я могу это описать выше со страницей JSF и управляемым бином?
@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...
}
}
Также как я могу передать этодлинный идентификатор управляемого элемента из JSF из команды commandButton?Это разрешено?
<!-- How to pass the value of id from -->
<h:commandButton action="downloadController.startDownload(#{garbage.id})">