【发布时间】:2011-07-26 18:50:02
【问题描述】:
我需要下载一个存储在数据库中的文件。我想我做了正确的查询并调用它我只是不知道如何将它连接到 JSF 页面中的按钮。 我也想知道,在将它传递到 JSF 页面之前,我是否必须将该图像保存在服务器的文件夹中。如果是这样,我该怎么做?
这是我用来从数据库返回 byte[] 的查询:
@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,它调用该查询然后获取 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;
}
现在这是让我感到困惑的部分,我怎么能在上面的 JSF 页面和托管 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...
}
}
另外,我如何从命令按钮中的 JSF 将那个长 id 传递给 managedBean?这是否允许?
<!-- How to pass the value of id from -->
<h:commandButton action="downloadController.startDownload(#{garbage.id})">
【问题讨论】:
标签: java jsf jpa jakarta-ee download