Почему простые символы не приносят мне изображение из базы данных?

Я пытаюсь принести изображение из базы данных, но оно не показывает его мне (только у одной записи есть загруженное изображение):

Esto es lo que me aparecé

Это код вида, с которым я загружаю изображения:

<p:fileUpload fileUploadListener="#{libroController.handleFileUpload}" mode="advanced"
                      update="messages" auto="true" allowTypes="/(\.|\/)(gif|jpe?g|png)$/" />

Это код вида, с которым я его показываю:

<p:dataTable var="libro" value="#{libroController.libros}">

            <p:column headerText="Foto">
                <p:graphicImage value="#{libroController.getFoto(libro)}" style="max-width: 200px;" 
                                rendered="#{libroController.getFoto(libro) ne null}" />
            </p:column>

</p:datatable>

Таким образом Я привез это из моего bean-компонента:

public StreamedContent getFoto(Libro libro) {
    if (librosManager.getFoto(libro) != null)
        return new DefaultStreamedContent(new ByteArrayInputStream(librosManager.getFoto(libro)));
    else
        return null;
}

И поэтому я привел это из своего менеджера Bean:

    public byte[] getFoto(Libro libro) {
    try {
        return (byte[]) em.createQuery("SELECT l.foto FROM Libro l WHERE l = :libro").setParameter("libro", libro).getSingleResult();
    } catch(NoResultException e){
        return null;
    }
    catch (Exception e) {
        System.out.println("Error al traer la imagen " + e);
        return null;
    }
}

Следует отметить, что это не отправляет мне никаких ошибок из консоли, я надеюсь, что вы можете помочь мне, спасибо

0
задан 07.01.2017, 22:56
0 ответов

Так как оказывается, что вид не может получать и посылать так легко данные о драйвере (я не понимаю точно, почему) поэтому моя функция getFoto () не возвращает того, что вид действительно ждет, будьте таким, как он был, правильный способ приносить изображения с таблицы в виде - следующий.

Вид:

            <p:column headerText="Foto">
                <p:graphicImage value="#{libroController.image}" rendered="#{libroController.getFotoPerfil(libro) ne null}" style="max-width: 200px;">
                    <f:param name="id" value="#{libro.id}" />
                </p:graphicImage> 
            </p:column>

Bean:

    public StreamedContent getImage() throws IOException {
    FacesContext context = FacesContext.getCurrentInstance();
    if (context.getCurrentPhaseId() == PhaseId.RENDER_RESPONSE)
        return new DefaultStreamedContent();
    else {
        String id = context.getExternalContext().getRequestParameterMap().get("id");
        if (librosManager.getFotoPerfil(Long.parseLong(id)) != null)
            return new DefaultStreamedContent(new ByteArrayInputStream(librosManager.getFoto(Long.parseLong(id))), "image/png");
        else
            return null;
    }
}

ManagerBean:

public byte[] getFoto(long id) {
    try {
        return (byte[]) em.createQuery("SELECT l.foto FROM Libro l WHERE l.id = :id").setParameter("id", id).getSingleResult();
    } catch (NoResultException e) {
        return null;
    } catch (Exception e) {
        System.out.println("Error al traer la imagen " + e);
        return null;
    }
}
0
ответ дан 03.12.2019, 17:50