jsf - passthrough - ¿Cómo vincular el contenido dinámico usando<p: media>?
jsf passthrough (1)
Al igual que en <p:graphicImage>
, el atributo de value
puede apuntar a una propiedad de bean que devuelve StreamedContent
. Esto solo requiere un método getter especial por las razones que se explican en detalle en la siguiente respuesta sobre el uso de <p:graphicImage>
con un recurso dinámico de una base de datos: Visualice la imagen dinámica de la base de datos con p: graphicImage y StreamedContent .
En tu ejemplo particular, se vería así:
<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()));
}
}
}
Uso <p:media>
para mostrar contenido PDF estático.
<p:media value="/resource/test.pdf"
width="100%" height="300px" player="pdf">
</p:media>
¿Cómo puedo cambiarlo para mostrar contenido dinámico?