Изображения находятся в блобах. Как отобразить несколько изображений одновременно(предварительно преобразовав их из байтов) на странице?
Бины Car и Image
public class Car {
private long id;
private String autoMark;
public Car() {
}
//getters setters
public class Image {
int id;
int lot_id;
byte[] image;
public Image() {
}
//getters setters
Контроллер ImageController
package controller;
import bean.Image;
import database.Database;
import java.io.Serializable;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import javax.enterprise.context.ApplicationScoped;
import javax.faces.bean.ManagedBean;
@ManagedBean(eager = true)
@ApplicationScoped
public class ImageController implements Serializable {
ArrayList<Image> images;
public ImageController() {
}
public ArrayList<Image> getImages() {
images = new ArrayList<>();
try (Connection conn = Database.getConnection();
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("select * from image where lot_id=1")) {
while (rs.next()) {
Image image = new Image();
image.setId(rs.getInt("id"));
image.setUser_id(rs.getInt("user_id"));
image.setLot_id(rs.getInt("lot_id"));
image.setImage(rs.getBytes("image"));
}
} catch (SQLException ex) {
System.out.println(ex);
}
return images;
}
}
Сервлет ShowImage для преобразования байт в изображение. Сейчас работает если передавать 1 изображение в виде байтов.
package servlet;
import bean.Image;
import controller.ImageController;
import java.io.IOException;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.util.ArrayList;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class ShowImage extends HttpServlet {
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("image/jpeg");
OutputStream out = response.getOutputStream();
try {
int id = Integer.valueOf(request.getParameter("id"));
ImageController imageController = new ImageController();
// ArrayList<Image> images = imageController.getImages(); // как обработать эту коллекцию? Нужно вытянуть из нее ид изображения.
byte[] image = imageController.getImage(id);
response.setContentLength(image.length);
out.write(image);
}catch (Exception ex){
ex.printStackTrace();
} finally {
out.close();
}
}
}
Код страницы компонент PrimeFaces
<p:galleria value="#{imageController.getImages()}" var="image" panelWidth="152" panelHeight="102" showCaption="false">
<p:graphicImage name="/ShowImage?id=#{image.id}" alt="Image Description for #{image}" title="#{image}"/>
</p:galleria>