10

<p:media>静的PDFコンテンツを表示するためにを使用します。

<p:media value="/resource/test.pdf" 
         width="100%" height="300px" player="pdf">  
</p:media>

動的コンテンツを表示するように変更するにはどうすればよいですか?

4

1 に答える 1

12

のように<p:graphicImage>value属性はを返すBeanプロパティを指すことができますStreamedContent<p:graphicImage>これには、データベースの動的リソースでの使用に関する次の回答で詳細に説明されている理由から、特別なgetterメソッドのみが必要です。p: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()));
        }
    }

}
于 2013-01-09T11:04:51.290 に答える