在JSF视图中显示BLOB类型

时间:2013-02-05 09:49:22

标签: jpa jsf-2 blob

我正在使用JBoss AS7,JSF2,MySQL,EJB和JPA为我的公司创建一个Java EE应用程序。

我的JSF视图中有一个dataTable,其中有几行包含从我的数据库中检索的数据。在这个数据中,我有一个BLOB列,可以包含任何文件类型,如图像,PDF,文本。

我想在每个行中放置一个链接,在新窗口中打开文件。

  1. 如何将BLOB类型转换为字节?
  2. 我该怎么做这种工作?

1 个答案:

答案 0 :(得分:2)

  

如何将BLOB类型转换为字节?

只需将@Lob注释放在JPA byte[]的{​​{1}}属性上。


  

我该怎么做这类工作?

您需要让JSF在表中生成所需的链接,并将实体ID作为请求参数。

@Entity

然后创建一个简单的file servlet,将<h:dataTable value="#{bean.entities}" var="entity"> <h:column> <h:outputLink value="#{request.contextPath}/fileservlet?id=#{entity.id}" target="_blank">#{entity.filename}</h:outputLink> <h:column> </h:dataTable> 流式传输到byte[]中的响应(明显的参数验证和省略的异常处理)。

doGet()

@WebServlet("/fileservlet") public class FileServlet extends HttpServlet { @EJB private EntityService service; @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { Entity entity = service.find(request.getParameter("id")); response.setContentType(entity.getContentType()); response.setContentLength(entity.getContent().length); response.setHeader("Content-Disposition", "inline;filename=\"" + URLEncoder.encode(entity.getFilename(), "UTF-8") + "\""); response.getOutputStream().write(entity.getContent()); } } 返回getContent()属性的位置。