Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Отображение изображения из BLOB графическим компонентом PrimeFaces. / 11 сообщений из 11, страница 1 из 1
26.06.2014, 16:02
    #38681003
AK1988
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отображение изображения из BLOB графическим компонентом PrimeFaces.
Нужно отобразить изображения находящиеся в BLOB-ах графическим компонентом PrimeFaces <p:galleria>.

Вот реализация на данный момент -

Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
<p:dataGrid var="car" value="#{postController.cars}" columns="3" rows="12"   <!-- Получаем список cars  -->
                        paginator="true" rowsPerPageTemplate="9,12,15" 
                        currentPageReportTemplate="{CurrentPageReport} {FirstPageLink} {PreviousPageLink} 
                        {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}">
                <p:column>
                    <p:panel header="#{car.autoMark}">
                        <h:panelGrid columns="1">
                            <h:outputText value="#{car.autoModel}" />
                            <p:galleria value="#{imageController.getImagesById(car.id)}" var="image" panelWidth="152" panelHeight="102" showCaption="false">   <!-- Получаем список изображений для конкретной car  -->
                                <p:graphicImage value="/TestImage?imageInBytes=#{image.imageInBytes}" alt="Image Description for #{image.id}" title="#{image.lot_id}" /> <!-- Преобразуем байты в изображения сервлетом  -->
                            </p:galleria>
                        </h:panelGrid>
                    </p:panel>
                </p:column>
</p:dataGrid>



Строка

Код: xml
1.
<p:graphicImage value="/TestImage?imageInBytes=#{image.imageInBytes}" alt="Image Description for #{image.id}" title="#{image.lot_id}" />



в браузере

Код: html
1.
<img id="j_idt19:1:j_idt27" src="/PROJECT/TestImage?imageInBytes=[B@2f0aadeb&;amp;pfdrid_c=true" alt="Image Description for 1" title="1">




Сейчас 2 проблемы:

1. Не отображаются изображения. Код сервлета - не знаю что тут не так.

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
        response.setContentType("image/jpeg");
        try (OutputStream out = response.getOutputStream();) {
            byte[] imageInBytes = request.getParameter("imageInBytes").getBytes();
            response.setContentLength(imageInBytes.length);
            out.write(imageInBytes);
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }




2. Компоненту <p:galleria> передается несколько объектов-изображений, но определяется только одно, при этом в следующем блоке dataGrid в котором свой компонент <p:galleria> со своими изображениями отображается второе изображение из первого компонента <p:galleria>, имхо не отрабатывает внутренний цикл, как исправить эту асинхронность?
...
Рейтинг: 0 / 0
26.06.2014, 16:16
    #38681016
0FD
0FD
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отображение изображения из BLOB графическим компонентом PrimeFaces.
AK1988,

Зачем вообще это надо делать?
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
response.setContentType("image/jpeg");
try (OutputStream out = response.getOutputStream();) {
     byte[] imageInBytes = request.getParameter("imageInBytes").getBytes();
     response.setContentLength(imageInBytes.length);
     out.write(imageInBytes);
} catch (Exception ex) {
      ex.printStackTrace();
}



видно image.imageInBytes это byte[] почему сразу не писать
value="data:image/jpeg;base64,далее byte[] в base64"
...
Рейтинг: 0 / 0
26.06.2014, 16:25
    #38681021
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отображение изображения из BLOB графическим компонентом PrimeFaces.
0FDvalue="data:image/jpeg;base64,далее byte[] в base64"
Потому что base64 раздувает объемы некисло.
...
Рейтинг: 0 / 0
26.06.2014, 16:33
    #38681029
0FD
0FD
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отображение изображения из BLOB графическим компонентом PrimeFaces.
Blazkowicz,

Не спорю, но с таким сервлетом, обьемы не сократятся
...
Рейтинг: 0 / 0
26.06.2014, 16:37
    #38681033
AK1988
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отображение изображения из BLOB графическим компонентом PrimeFaces.
0FDAK1988,

Зачем вообще это надо делать?
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
response.setContentType("image/jpeg");
try (OutputStream out = response.getOutputStream();) {
     byte[] imageInBytes = request.getParameter("imageInBytes").getBytes();
     response.setContentLength(imageInBytes.length);
     out.write(imageInBytes);
} catch (Exception ex) {
      ex.printStackTrace();
}



видно image.imageInBytes это byte[] почему сразу не писать
value="data:image/jpeg;base64,далее byte[] в base64"

Честно говоря, как сделать иначе не знаю.
...
Рейтинг: 0 / 0
26.06.2014, 16:43
    #38681043
ivanra
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отображение изображения из BLOB графическим компонентом PrimeFaces.
вот это:
Код: java
1.
imageInBytes = request.getParameter("imageInBytes").getBytes();


В запрос приходит готовый массив #{image.imageInBytes} (фактически, адрес массива [B@2f0aadeb), значит, код должен быть примерно такой:
Код: java
1.
imageInBytes = (byte[])request.getParameter("imageInBytes");
...
Рейтинг: 0 / 0
26.06.2014, 16:44
    #38681044
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отображение изображения из BLOB графическим компонентом PrimeFaces.
У вас полное непонимание HTTP GET и двоичных\текстовых данных.
Потому что из вот этого никак получить изображение не выйдет. :)
imageInBytes=[B@2f0aadeb
Зачем передавать целиком изображения на клиента, а потом опять на сервер, а потом опять на клиента это тоже загадка.
...
Рейтинг: 0 / 0
26.06.2014, 16:46
    #38681047
ivanra
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отображение изображения из BLOB графическим компонентом PrimeFaces.
на самом деле даже хуже, приходит адрес, приведженный к строке. Лучше переписать код сервлета, добывая ресурс по-человечески
...
Рейтинг: 0 / 0
26.06.2014, 16:52
    #38681053
0FD
0FD
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отображение изображения из BLOB графическим компонентом PrimeFaces.
AK1988,

У Вас есть image.id, вот его в сервлет и передавайте, а image.id находите картинку и клиенту передаете
<p:graphicImage value="/TestImage?imageId=#{image.id" alt="Image Description for #{image.id}" title="#{image.lot_id}" />
...
Рейтинг: 0 / 0
26.06.2014, 21:39
    #38681287
AK1988
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отображение изображения из BLOB графическим компонентом PrimeFaces.
Смотрю на код - может неделя поиска решения через гугл сказались. Сразу делал полную выборку изображений, добавлял в коллекцию, а в геттере выборку из коллекции через ид лота, теперь напрямую

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
public class ImageController implements Serializable {

    ArrayList<Image> images;

    public ImageController() {
    }
    public ArrayList<Image> getImages(int id) {

        images = new ArrayList<>();
        String sql = "SELECT * FROM image WHERE lot_id='" + id + "'";

        try (Connection conn = Database.getConnection();
                Statement stmt = conn.createStatement();
                ResultSet rs = stmt.executeQuery(sql)) {
            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.setImageInBytes(rs.getBytes("image"));

                images.add(image);
            }
        } catch (SQLException ex) {
            System.out.println(ex);
        }
        return images;
    }



Код: xml
1.
2.
3.
                            <p:galleria value="#{imageController.getImages(car.id)}" var="image" panelWidth="152" panelHeight="102" showCaption="false">
                                <p:graphicImage value="" alt="Image Description for #{image.id}" title="#{image.lot_id}"/>
                            </p:galleria>



Скажите, как лучше реализовать отображение изображения в value="" компонента <p:graphicImage>?
...
Рейтинг: 0 / 0
27.06.2014, 01:46
    #38681362
AK1988
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отображение изображения из BLOB графическим компонентом PrimeFaces.
Сделал так как посоветовали, для отображения пользовался классом ImageIO. Спасибо большое, на многих форумах задавал вопрос, но помогли именно тут и быстрее всех.
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Отображение изображения из BLOB графическим компонентом PrimeFaces. / 11 сообщений из 11, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]