2013-01-09 11 views

Odpowiedz

9

Podobnie jak w przypadku <p:graphicImage>, atrybut value może wskazywać na właściwość komponentu bean zwracającą StreamedContent. Wymaga to tylko specjalnej metody pobierającej z powodów wyjaśnionych szczegółowo w następującej odpowiedzi na temat używania <p:graphicImage> z dynamicznym zasobem z bazy danych: Display dynamic image from database with p:graphicImage and StreamedContent.

W danym przykładzie będzie to wyglądać tak:

<p:media value="#{mediaManager.stream}" width="100%" height="300px" player="pdf"> 
    <f:param name="id" value="#{bean.mediaId}" /> 
</p:media> 

Z

@ManagedBean 
@ApplicationScoped 
public class MediaManager { 

    @EJB 
    private MediaService service; 

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

     if (context.getCurrentPhaseId() == PhaseId.RENDER_RESPONSE) { 
      // So, we're rendering the HTML. Return a stub StreamedContent so that it will generate right URL. 
      return new DefaultStreamedContent(); 
     } else { 
      // So, browser is requesting the media. Return a real StreamedContent with the media bytes. 
      String id = context.getExternalContext().getRequestParameterMap().get("id"); 
      Media media = service.find(Long.valueOf(id)); 
      return new DefaultStreamedContent(new ByteArrayInputStream(media.getBytes())); 
     } 
    } 

} 
+2

Co jeśli Trzymam ManagedBean w @ViewScoped? –

Powiązane problemy