InputStream
OmniFaces を使用して JSF 2.0 に動的イメージを埋め込んで表示するにはどうすればよいですか?
1 に答える
OmniFaces は、このためのユーティリティをまだ提供していません。
イメージ ファイルがディスク ファイル システムにある場合は、通常の URL でアクセスできるように、サーブレット コンテナ設定で仮想コンテキストを作成する必要があります。<h:graphicImage> または <img> タグを使用して webapps / webcontext / deploy フォルダーの外部から画像を読み込むも参照してください。
画像ファイルが DB に保存されている場合は、InputStream
画像の を DB からOutputStream
HTTP 応答の に書き込むだけの単純なサーブレットを作成する必要があります。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 メソッド自体はブラウザーが実際に画像を要求したときにのみ呼び出されます。この件に関するショーケースとブログも参照してください。