我用<p:media>
显示静态PDF内容。
<p:media value="/resource/test.pdf"
width="100%" height="300px" player="pdf">
</p:media>
我怎样才能改变它来显示动态内容?
我用<p:media>
显示静态PDF内容。
<p:media value="/resource/test.pdf"
width="100%" height="300px" player="pdf">
</p:media>
我怎样才能改变它来显示动态内容?
等作为<p:graphicImage>
,所述value
属性可以指向bean属性返回StreamedContent
。 这仅需要针对其详细描述在以下的答案上使用解释的原因一个特殊getter方法<p:graphicImage>
与来自数据库的动态资源: 从数据库与对显示动态图像:graphicImage的和StreamedContent 。
在您的具体的例子,它是这样的:
<p:media value="#{mediaManager.stream}" width="100%" height="300px" player="pdf">
<f:param name="id" value="#{bean.mediaId}" />
</p:media>
同
@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()));
}
}
}