2013-01-09 18 views

Antwort

9

Wie in <p:graphicImage> kann das Attribut value auf eine Bean-Eigenschaft verweisen, die StreamedContent zurückgibt. Dies erfordert nur eine spezielle Getter-Methode aus den Gründen, die in der folgenden Antwort zur Verwendung von <p:graphicImage> mit einer dynamischen Ressource aus einer Datenbank ausführlich erläutert werden: Display dynamic image from database with p:graphicImage and StreamedContent.

In Ihrem speziellen Beispiel würde es so aussehen:

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

Mit

@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

Was ist, wenn ich in meinem @ViewScoped ManagedBean halten? –