này có một giải pháp - sử dụng servlet đây là một servlet mà sẽ làm việc trong bất kỳ ứng dụng JSF
package com.dossier.web.handlers;
//~--- non-JDK imports --------------------------------------------------------
import com.dossier.backend.services.mongo.FileService;
import com.mongodb.gridfs.GridFSDBFile;
//~--- JDK imports ------------------------------------------------------------
import java.io.*;
import javax.faces.context.FacesContext;
import javax.servlet.ServletException;
import javax.servlet.SingleThreadModel;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.io.IOUtils;
/**
*
* @author Armen Arzumanyan
*/
@WebServlet(urlPatterns = { "/PreviewImage" })
public class PreviewImage extends HttpServlet implements SingleThreadModel {
private static final long serialVersionUID = -6624464650990859671L;
private FileService fileAction = new FileService();
@Override
public void init() throws ServletException {
super.init();
}
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doPreviewImage(request, response);
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {}
private void doPreviewImage(HttpServletRequest request, HttpServletResponse response) throws IOException {
FacesContext context = FacesContext.getCurrentInstance();
String fileIdStr = request.getParameter("fileId");
String widthStr = request.getParameter("w");
GridFSDBFile file = null;
int width = 0;
if ((widthStr != null) && (widthStr.length() > 0)) {
try {
width = Integer.parseInt(widthStr);
} catch (NumberFormatException e) {}
}
if (fileIdStr != null) {
if (fileAction != null) {
file = fileAction.getFile(fileIdStr.trim());
}
if (file != null) {
byte[] content = IOUtils.toByteArray(file.getInputStream());
if (content != null) {
String mimeType = file.getContentType();
response.addHeader("Pragma", "cache");
response.addHeader("Cache-Control", "max-age=3600, must-revalidate");
response.addDateHeader("Expires", System.currentTimeMillis() + 1000 * 3600 * 10);
response.setContentType(mimeType);
try {
if (((mimeType != null)
&& (mimeType.equalsIgnoreCase("image/gif") || mimeType.equalsIgnoreCase("image/x-png")
|| mimeType.equalsIgnoreCase("image/png") || mimeType.equalsIgnoreCase("image/jpg")
|| mimeType.equalsIgnoreCase("image/jpeg"))) || (width == 0)) {
response.getOutputStream().write(content);
} else {
// ByteArrayInputStream bi = new ByteArrayInputStream(content);
// InputStream thumbStream = scaleImageJPG(bi, width);
// byte[] thumbContent = new byte[thumbStream.available()];
// thumbStream.read(thumbContent);
response.getOutputStream().write(content);
}
} catch (IOException e) {
// log.error("file content send error");
e.printStackTrace();
} catch (Exception e) {
// log.error("file exception: " + e);
e.printStackTrace();
} finally {
content = null;
file = null;
}
return;
}
} else {
// TODO add page not found
response.addHeader("Pragma", "no-cache");
response.addDateHeader("Expires", System.currentTimeMillis() - 1000 * 3600);
try {
response.getWriter().println("file object is null");
} catch (Exception e) {}
return;
}
}
// TODO add page not found
response.addHeader("Pragma", "no-cache");
response.addDateHeader("Expires", System.currentTimeMillis() - 1000 * 3600);
try {
response.getWriter().println("file id is not set");
} catch (Exception e) {}
// log.debug("file ID parameter is not set or file is not found");
return;
}
// </editor-fold>
}
//~ Formatted by Jindent --- http://www.jindent.com
Và đây là một mã trang web
<h:graphicImage id="primage" styleClass="img-rounded img-responsive"
url="/PreviewImage?w=250&fileId=#{updatePersonBean.person.imageId}"
width="250" rendered="#{updatePersonBean.person.imageId != null}"/>
<h:graphicImage id="primagenew" styleClass="img-rounded img-responsive"
url="/resources/img/userpic_simple.gif"
width="250" rendered="#{updatePersonBean.person.imageId == null}"/>
Thưởng thức
Nguồn
2014-07-19 19:48:21
Tốt câu hỏi. Khi sửa chữa nhanh chóng, bạn có thể dễ dàng sử dụng JS cho việc này. Nhân tiện, PrimeFaces đã có thành phần ''. Không cần phải sử dụng thư viện của bên thứ ba cho điều đó. –
BalusC