Bonjour,
Il faut faire celà avec une servlet. Le principe, c'est que depuis ton backing bean tu récupères ta donnée binaire, tu la places dans l'objet Session, tu crées une servlet chargée de publier l'objet binaire, et tu te débrouilles pour que ton lien pointe vers la servlet.
Voici un exemple qui affiche une image dynamique, avec un peu de modifs, ça s'applique à un lien.
Je mets de côté la récupération des données blob depuis la DB.
Il faut commencer par ajouter une servlet dans ton projet VWP, qui va retourner le contenu binaire: Menu Files | New File | Visual Web | Servlet (Nom ChartViewer, package com.developpez.valered.vwp par exemple). De cette manière le VWP va te configurer automatiquement le web.xml.
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 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
| package com.developpez.valered.vwp;
import java.awt.image.*;
import java.io.*;
import java.net.*;
import javax.servlet.*;
import javax.servlet.http.*;
import org.jfree.chart.encoders.*;
public class ChartViewer extends HttpServlet {
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// get the chart from session
HttpSession session = request.getSession();
String reference = request.getParameter("ref");
if (reference != null) {
BufferedImage chartImage = (BufferedImage) session.getAttribute(reference);
// set the content type so the browser can see this as a picture
response.setContentType("image/jpeg");
// send the picture
response.getOutputStream().write(EncoderUtil.encode(chartImage, ImageFormat.JPEG, (float) 0.8));
}
}
/** Handles the HTTP <code>GET</code> method.
* @param request servlet request
* @param response servlet response
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}
/** Handles the HTTP <code>POST</code> method.
* @param request servlet request
* @param response servlet response
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}
} |
Ensuite, en mode design de ta page VWP, on place une Image image1, que l'on va initialiser en mode java, par exemple dans prerender()
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| String maReference = "maReferenceAMonImage";
// on passe les étapes qui permettent la création d'un BufferedImage
// qui contient notre image binaire
// on récupère l'objet Session
HttpSession session = (HttpSession) getExternalContext().getSession(true);
// on ajoute notre BufferedImage dans la session
session.setAttribute(maReference, bufferedImage);
// on initialise le composant JSF image pour que son URL pointe vers la servlet
// avec la bonne référence
image1.setUrl("ChartViewer?ref=" + maReference); |
Val
Partager