2013-08-13 7 views
5

लाइटबॉक्स का उपयोग करने के लिए, मुझे <p:graphicImage> द्वारा जेनरेट की गई छवि के लिंक की आवश्यकता है।<p: graphicImage> स्ट्रीमिंग स्ट्रीमिंग सामग्री

अंततः, एचटीएमएल इस तरह दिखना चाहिए:

<h:outputLink data-lightbox="bilder" value="???"> 
    <p:graphicImage value="#{imageStreamer.image}"> 
    <f:param name="imageId" value="#{gameReader.game.cover.id}"/> 
    </p:graphicImage> 
</h:outputLink> 

मैं <p:graphicImage> की ठोस URL को इस StreamedContent लौटने कि मैं यह कर सकते हैं कैसे मिलता है:

<a href="image.jpg" data-lightbox="bilder"> 
    <img src="image.jpg" /> 
</a> 

यह मेरा JSF प्रयास अब तक है इसे मेरे लिंक में इस्तेमाल करें?

+4

अच्छा प्रश्न का आनंद लें है। जल्दी से ग़लत फिक्स के रूप में, आप इसके लिए जेएस का आसानी से उपयोग कर सकते हैं। वैसे, प्राइमफेस में बॉक्स के बाहर पहले से ही ' 'घटक है। इसके लिए किसी तृतीय पक्ष लाइब्रेरी का उपयोग करने की आवश्यकता नहीं है। – BalusC

उत्तर

1

यह एक समाधान है - यहाँ सर्वलेट का उपयोग कर यहाँ एक सर्वलेट जो किसी भी 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 

में काम करेगा और एक वेब पेज कोड

<h:graphicImage id="primage" styleClass="img-rounded img-responsive" 
                   url="/PreviewImage?w=250&amp;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}"/> 

+0

यह एक समाधान है, लेकिन मैं ऐसा कुछ ढूंढ रहा था जिसके लिए अतिरिक्त सर्वलेट की आवश्यकता नहीं होगी। –

+0

कोई दूसरा समाधान नहीं, कोई अन्य समाधान सर्वलेट पर आधारित होगा, क्योंकि पूरे जेएसएफ सर्लेट पर भी आधारित है, किसी भी जावा वेब एप्लिकेशन को किसी प्रकार के सर्वलेट का उपयोग करना चाहिए, इस समाधान का मैंने कई परियोजनाओं में उपयोग किया था। :) –

संबंधित मुद्दे