2014-01-23 5 views
0

pf 3.3 인 jsf 2.0 프로젝트에서 프라임 페이스의 p:graphic image 구성 요소를 사용합니다. BalusC가 this과 같은 심각한 질문에서 설명했듯이이를 구현했습니다. 그것은 인터넷 익스플로러와 파이어 폭스에서 괜찮 으면서 ork하지만 구글 크롬에서 이미지가 깨진 이미지 링크를 뒤에 남겨두고 사라집니다.p : Google 크롬에서 잠시 후 graphicImage가 사라집니다

인터넷 탐색기에서; 내가 이미지로 저장할 때 untitled.png이라는 이름이고 괜찮습니다.

인터넷 탐색기에서; 내가 이미지로 저장할 때 dynamiccontent.xhtml.png이라는 이름이 붙었으니 괜찮습니다.

Google 크롬에서 그 이름이 dynamiccontent.xhtml이고 확장자를 변경하더라도 이미지가 보이지 않습니다.

내가

BufferedImage bufferedimage = new BufferedImage(_width, _height, BufferedImage.TYPE_INT_RGB); 
Graphics2D g2d = bufferedimage.createGraphics(); 
.... 
g2d.dispose(); 

ByteArrayOutputStream os = new ByteArrayOutputStream(); 
ImageIO.write(bufferedimage, "png", os); 

return os; 

같은 자바 그래픽 라이브러리로 이미지를 생성 한 후 XHTML과 같은 것입니다 :

<p:graphicImage value="#{imagesBean.image}"> 
    <f:param name="lilw" value="#{reportsLoadSheetBean.loadedIndexLandingWeight}" /> 
    <f:param name="litow" value="#{reportsLoadSheetBean.loadedIndexTakeOffWeight}" /> 
    <f:param name="lizfw" value="#{reportsLoadSheetBean.loadedIndexZeroFuelWeight}" /> 
    <f:param name="tl" value="#{reportsLoadSheetBean.topLimit}" /> 
    <f:param name="zfwf" value="#{reportsLoadSheetBean.zeroFuelWeightForward}" /> 
    <f:param name="zfwa" value="#{reportsLoadSheetBean.zeroFuelWeightAfter}" /> 
    <f:param name="towf" value="#{reportsLoadSheetBean.takeOffWeightForward}" /> 
    <f:param name="towa" value="#{reportsLoadSheetBean.takeOffWeightAfter}" /> 
    <f:param name="lwf" value="#{reportsLoadSheetBean.landingWeightForward}" /> 
    <f:param name="lwa" value="#{reportsLoadSheetBean.landingWeightAfter}" /> 
    <f:param name="width" value="600" /> 
    <f:param name="height" value="200" /> 
</p:graphicImage> 

그리고 마지막으로 응용 프로그램 이미지를 가져 와서 인터페이스로 전송 콩 범위 :

public StreamedContent getImage() throws IOException { 
    FacesContext context = FacesContext.getCurrentInstance(); 

    if (context.getCurrentPhaseId() == PhaseId.RENDER_RESPONSE) { 
     // So, we're rendering the view. Return a stub StreamedContent so 
     // that it will generate right URL. 
     return new DefaultStreamedContent(); 
    } else { 
     String lilw = context.getExternalContext().getRequestParameterMap().get("lilw"); 
     String litow = context.getExternalContext().getRequestParameterMap().get("litow"); 
     String lizfw = context.getExternalContext().getRequestParameterMap().get("lizfw"); 
     String tl = context.getExternalContext().getRequestParameterMap().get("tl"); 
     String zfwf = context.getExternalContext().getRequestParameterMap().get("zfwf"); 
     String zfwa = context.getExternalContext().getRequestParameterMap().get("zfwa"); 
     String towf = context.getExternalContext().getRequestParameterMap().get("towf"); 
     String towa = context.getExternalContext().getRequestParameterMap().get("towa"); 
     String lwf = context.getExternalContext().getRequestParameterMap().get("lwf"); 
     String lwa = context.getExternalContext().getRequestParameterMap().get("lwa"); 

     List<Number> zeroFuelWeightIntervals = new ArrayList<Number>(); 
     List<Number> takeOffWeightIntervals = new ArrayList<Number>(); 
     List<Number> landingWeightIntervals = new ArrayList<Number>(); 

     zeroFuelWeightIntervals.add(Double.valueOf(zfwf)); 
     zeroFuelWeightIntervals.add(Double.valueOf(zfwa)); 
     zeroFuelWeightIntervals.add(Double.valueOf(tl)); 

     takeOffWeightIntervals.add(Double.valueOf(towf)); 
     takeOffWeightIntervals.add(Double.valueOf(towa)); 
     takeOffWeightIntervals.add(Double.valueOf(tl)); 

     landingWeightIntervals.add(Double.valueOf(lwf)); 
     landingWeightIntervals.add(Double.valueOf(lwa)); 
     landingWeightIntervals.add(Double.valueOf(tl)); 

     int width = Integer.parseInt(context.getExternalContext().getRequestParameterMap().get("width")); 
     int height = Integer.parseInt(context.getExternalContext().getRequestParameterMap().get("height")); 

     IdealIntervalPointDiagram diagram = new IdealIntervalPointDiagram(
       "ZFL", Double.valueOf(lizfw), zeroFuelWeightIntervals, 
       "TOW", Double.valueOf(litow), takeOffWeightIntervals, 
       "LAW", Double.valueOf(lilw), landingWeightIntervals, 
       width, height); 

     ByteArrayOutputStream os = new ByteArrayOutputStream(); 

     try { 
      os = diagram.paint(); 

     } catch (IOException e) { 
      e.printStackTrace(); 
     } 

     return new DefaultStreamedContent(new ByteArrayInputStream(os.toByteArray()), "image/png"); 
    } 

primeface에 대한 버그 일 수 있습니까?

답변

1

문제점을 발견했습니다. 그것은 content-length 헤더를 엄격히 응답하는 이미지와 서버가 이미지를 압축하기 때문에 google chrome에 관한 것입니다. 실제 콘텐츠 크기 및 헤더에 쓰여진 크기가 일치하지 않습니다. 다른 주류 브라우저는이 불일치하지만 Google 크롬을 무시합니다. 그래서 나는 이미지를 반환하기 전에

FacesContext.getCurrentInstance().getExternalContext().setResponseContentLength(os.size()); 

으로 전화를 걸었으며 현재는 Google 크롬에서도 잘 작동합니다.