2013-01-09 13 views

risposta

9

Come nel caso <p:graphicImage>, l'attributo value può fare riferimento a una proprietà bean che restituisce StreamedContent. Ciò richiede solo un metodo getter speciale per i motivi spiegati in dettaglio nella seguente risposta sull'uso di <p:graphicImage> con una risorsa dinamica da un database: Display dynamic image from database with p:graphicImage and StreamedContent.

Nel vostro esempio particolare, sarebbe simile a questa:

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

Con

@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

Che cosa succede se tengo la mia ManagedBean in @ViewScoped? –