Я пытаюсь принести изображение из базы данных, но оно не показывает его мне (только у одной записи есть загруженное изображение):
Это код вида, с которым я загружаю изображения:
<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;
}
}
Следует отметить, что это не отправляет мне никаких ошибок из консоли, я надеюсь, что вы можете помочь мне, спасибо
Так как оказывается, что вид не может получать и посылать так легко данные о драйвере (я не понимаю точно, почему) поэтому моя функция 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;
}
}