У меня возникли проблемы с отображением изображения из базы данных на компоненте графического интерфейса. Я использую первичность 3.4.2, jsf 2.2, glassfish 3.1.2.2. Ниже приведен простой код, который я пытаюсь сделать. Я просмотрел другие сообщения, связанные с p: graphicimage, и включил рекомендации, но я не смог бы выполнить эту работу. Что здесь не так?
index.xhtml
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:p="http://primefaces.org/ui">
<h:head>
</h:head>
<h:body>
<h:form id="f1">
<p:panel style="height: 500px ; width: 800px" visible="true">
<p:graphicImage value="#{treeBean.image}" />
</p:panel>
</h:form>
</h:body>
</html>
TreeBean.java
@Named
@ApplicationScoped
public class TreeBean implements Serializable{
@EJB
private ImageEJB imageEjb;
public StreamedContent getImage() throws IOException{
FacesContext context = FacesContext.getCurrentInstance();
if (context.getCurrentPhaseId() == PhaseId.RENDER_RESPONSE) {
return new DefaultStreamedContent();
}
else {
Decisiontree dr = imageEjb.getTree();
return new DefaultStreamedContent(new ByteArrayInputStream(dr.getImage()));
}
}
}
Это то, что я вижу в консоли браузера.
Добавьте MIME-тип в web.xml, как показано ниже:
<mime-mapping>
<extension>xhtml</extension>
<mime-type>image/svg+xml</mime-type>
</mime-mapping>
Измените свой оператор return в своем bean-компоненте, как показано ниже:
return new DefaultStreamedContent(new ByteArrayInputStream(dr.getImage()),"image/svg+xml");