2

InputStreamOmniFaces を使用して JSF 2.0 に動的イメージを埋め込んで表示するにはどうすればよいですか?

4

1 に答える 1

2

OmniFaces は、このためのユーティリティをまだ提供していません。

イメージ ファイルがディスク ファイル システムにある場合は、通常の URL でアクセスできるように、サーブレット コンテナ設定で仮想コンテキストを作成する必要があります。<h:graphicImage> または <img> タグを使用して webapps / webcontext / deploy フォルダーの外部から画像を読み込むも参照してください。

画像ファイルが DB に保存されている場合は、InputStream画像の を DB からOutputStreamHTTP 応答の に書き込むだけの単純なサーブレットを作成する必要があります。JSPページでデータベースから画像を取得して表示する方法も参照してください。(これは JSP/HTML を必要としないことに注意してください。単に HTML要素<h:graphicImage>を生成するのと同じように使用できます)。<img>

PrimeFaces があります<p:graphicImage>が、これは実装が少し直感的ではありません。p:graphicImage および StreamedContent を使用してデータベースから動的画像を表示するも参照してください。


更新: OmniFaces 2.0 (JSF 2.2 用) 以降、以下のような直観的な方法でマネージド Beanのまたはプロパティを<o:graphicImage>直接参照することをサポートするコンポーネントがあります。byte[]InputStream@ApplicationScoped

<o:graphicImage value="#{imageStreamer.getById(bean.imageId)}" />
@Named
@ApplicationScoped
public class ImageStreamer {

    @Inject
    private ImageService service;

    public InputStream getById(Long id) { // byte[] is also supported.
        return service.getContent(id);
    }

}

PrimeFaces とは対照的に<p:graphicImage>、 no<f:param>は必要なく、EL メソッドの引数はレンダリング応答フェーズで評価されますが、EL メソッド自体はブラウザーが実際に画像を要求したときにのみ呼び出されます。この件に関するショーケースブログも参照してください。

于 2012-07-25T14:21:03.083 に答える