L'affichage des images à partir de bases de données MySQL en JSF datatable
J'ai MySQL base de données qui stocke les images dans un blob
colonne. Je voudrais montrer dans un PrimeFaces <p:dataTable>
. Comment puis-je y parvenir?
Qu'avez-vous essayé? Pourquoi il ne fonctionne pas? Qu'est-ce que votre erreur exact? Avez-vous essayé de l'afficher simplement sur une page au lieu d'un tableau?
possible en double Link
oui, j'ai essayé, mais il semble que Primefaces tag
Essayez cette java.dzone.com/articles/dynamic-images-primefaces
possible en double Link
oui, j'ai essayé, mais il semble que Primefaces tag
<p:graphicImage>
besoin d'une url de l'image et il n'accepte pas de diffuser le blob à partir de la base de donnéesEssayez cette java.dzone.com/articles/dynamic-images-primefaces
OriginalL'auteur NiÑo | 2013-06-05
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser
<p:graphicImage>
pour afficher des images stockées dans unbyte[]
, quel que soit lebyte[]
source (DB, système de fichier du disque, réseau, etc...). Exemple le plus simple est:qui désigne un
StreamedContent
propriété.Cela a toutefois un écueil à éviter, notamment lorsqu'ils sont utilisés dans une itération composant, tel qu'un tableau de données: la méthode de lecture sera invoquée deux fois; la première fois par JSF lui-même pour générer l'URL pour
<img src>
et la deuxième fois par webbrowser quand il a besoin de télécharger le contenu de l'image en fonction de l'URL dans<img src>
. Pour être efficace, il ne devrait pas être frappé dans la DB dans la première getter appel. Aussi, afin de pouvoir paramétrer la méthode de lecture d'appel de sorte que vous pouvez utiliser une méthode générique dans lequel vous passez d'une image spécifique ID, vous devriez être en utilisant un<f:param>
(veuillez noter que EL 2.2 fonction de la méthode de passage des arguments ne fonctionne pas du tout comme cela ne se retrouvent pas dans l'URL de<img src>
!).Résumé, cela devrait le faire:
La
#{item.imageId}
évidemment renvoie l'unique idenfitier de l'image dans la base de données (clé primaire) et donc pas labyte[]
de contenu. Le#{imageStreamer}
est une application étendue de haricot qui ressemble à ceci:La
Image
classe est dans cet exemple particulier, juste un@Entity
avec un@Lob
surbytes
propriété (que vous êtes en utilisant JSF, j'ai de cource supposons que vous êtes en utilisant JPA pour interagir avec la DB).La
ImageService
est juste une norme@Stateless
EJB, rien de spécial à voir ici:Voir aussi:
Vous êtes les bienvenus.
OriginalL'auteur BalusC
Si vous utilisez Richfaces, vous pouvez utiliser a4j:mediaOutput composant de flux, le blob à partir d'un bean.
Si ce n'est pas le cas, je crains que je ne suis pas familier avec Primefaces. Si il ne propose pas de composant que vous avez besoin d'un moyen de génération d'une URL qui pointe vers une servlet qui renvoie le blob. De cette façon, vous pouvez utiliser
h:graphicImage
avec auto-généré URL.OriginalL'auteur MaQy