gpt4 book ai didi

jpa - 在 JSF View 中显示 BLOB 类型

转载 作者:行者123 更新时间:2023-12-02 02:06:40 24 4
gpt4 key购买 nike

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

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

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

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

最佳答案

How can I convert BLOB type to byte?

只需将 @Lob 注释放在 JPA @Entitybyte[] 属性上即可。


How can I do this kind of work?

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

<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>

然后创建一个简单的file servlet它将 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() 返回 @Lob byte[] 属性。

关于jpa - 在 JSF View 中显示 BLOB 类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14704469/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com