2011-11-07 2 views
3

데이터베이스의 이미지를 나타내는 StreamedContent 객체 (Primeface Type)가 포함 된 객체 목록이있는 Bean이 있습니다. 이제 JSF 2.0 페이지 (Primefaces 포함)에서이 목록을 반복하여 이미지를 보여 드리려고합니다.ui : repeat 또는 p : dataTable에서 p : graphicImage 사용

<p:graphicImage value="#{ImageLoader.oneImage}" title="aImage" alt="no Img"/> 

을하지만 둥지 경우는 C에서이 태그 : 이런 식으로 하나 개의 이미지를 표시 작동 foreach는, UI : 반복하거나 P : 데이터 테이블, 이미지가로드되지 않습니다!

@Named(value = "ImageLoader") 
@Stateless 
public class ImageLoader { 

@Inject 
private ImageFacade imgFacade; 

private List<StreamedContent> allImages = new ArrayList <>(); 

private StreamedContent oneImage; 

public StreamedContent getOneImage() { 
    List<Image> findAll = imgFacade.findAll(); 
    byte[] imagedata = findAll.get(0).getImagedata(); 
    StreamedContent retVal = new DefaultStreamedContent(new  ByteArrayInputStream(imagedata)); 
    return retVal; 
} 

public void setOneImage(StreamedContent oneImage) { 
    this.oneImage = oneImage; 
} 

public List<StreamedContent> getAllImages() { 
    List<Image> findAll = imgFacade.findAll(); 
    Logger.getLogger(ImageLoader.class.getName()).log(Level.INFO, "### COUNT: {0}", findAll.size()); 
    for (Image image : findAll) { 
     byte[] imagedata = image.getImagedata(); 
     allImages.add(new DefaultStreamedContent(new ByteArrayInputStream(imagedata))); 
     Logger.getLogger(ImageLoader.class.getName()).log(Level.INFO, "### Added Image {0}", image.getImagename()); 
    } 
    return allImages; 
} 

public void setAllImages(ArrayList<StreamedContent> allImages) { 
    this.allImages = allImages; 
} 

} 

내가 문제를 볼 수 없습니다, 당신은 제발 도울 수 : 대체 텍스트가 대신

<ui:repeat value="#{ImageLoader.allImages}" var="img"> 
<p:graphicImage value="#{img}" alt="Hier sollte ein Bild sein" /> 
<br/> 
</ui:repeat> 

이미지 - 로더 콩 주심? :) 내가 하루 정도이 일에 내 머리를 부러졌지만, 나는 해결책을 발견

답변

6

감사 & 감사합니다!

JSF :

<ui:repeat value="#{bean.images}" var="imageID"> 
      <p:graphicImage value="#{bean.image}"> 
       <f:param name="imageID" value="#{imageID}" /> 
      </p:graphicImage> 
</ui:repeat> 
관리 콩

:

public List<String> getImages(){ 
     List<String> l = new ArrayList<String>(); 
     for(Theme t:themeFacade.findAll()) 
      l.add(t.getId().toString()); 
     return l; 
    } 

    public StreamedContent getImage(){ 
     FacesContext context = FacesContext.getCurrentInstance(); 
     HttpServletRequest myRequest = (HttpServletRequest) context.getExternalContext().getRequest(); 
     String imageID = (String) myRequest.getParameter("imageID"); 
     return new DefaultStreamedContent(new ByteArrayInputStream(themeFacade.find(Long.parseLong(imageID)).getImage())); 
    } 
+0

좋은 생각이 graphicImage 캐시에 추가 할 = 거짓 –

관련 문제