我从数据库中获得了图像内容,其类型为byte[]
。
private byte[] image;
如何在JSF页面中将字节数组显示为真实的图像?
<h:graphicImage>
直接实现的。它只能指向一个URL,而不能指向byte[]
或InputStream
。基本上,您需要确保这些字节直接作为HTTP响应在给定的URL上可用,然后您可以在<h:graphicImage>
(甚至是普通HTML <img>
)中使用它。<h:graphicImage value="/image/#{someBean.imageId}" />
@WebServlet("/image/*")
public class ImageServlet extends HttpServlet {
@EJB
private ImageService service;
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
Long id = Long.valueOf(request.getPathInfo().substring(1));
Image image = service.find(id);
response.setContentType(getServletContext().getMimeType(image.getName()));
response.setContentLength(image.getBytes().length);
response.getOutputStream().write(image.getBytes());
}
}
<o:graphicImage>
,这样可以更加直观地使用。<o:graphicImage value="#{imageBean.getBytes(someBean.imageId)}" />
@Named
@ApplicationScoped
public class ImageBean {
@EJB
private ImageService service;
public byte[] getBytes(Long imageId) {
return service.getImageBytes(imageId);
}
}
只需将一个字符串变量绑定到UI上的图像。
<img src="data:image/png;base64, "#{imageString}">
String imageString= new String(Base64.encodeBase64(byte array fetched from database));