私は、Spring 4 + JSF 2.0フレームワーク+ MySQLデータベースを使用してWebサイトを開発しています。 私はデータベースから画像を取得してブラウザに表示しようとしています。 だから、基本的に私は、画像と呼ばれるLongBlob列を持つproduct_tというテーブルを持っています。これはpngファイルを格納する責任があります。Spring + JSF - データベースからのイメージ取得とブラウザーでの表示
私は、ページ内の各製品から各画像を取得する必要があります。
<ui:repeat value="#{productControllerImpl.list3NotNewRandomProducts()} var="product" varStatus="status">
<h2>#{product.name}</h2>
<strong>#{product.subDescription}</strong><br></br> <span>#{product.description}
</ui:repeat>
これまでのところは良いです。
私は画像を取得するためにサーブレットを呼び出す必要がUIの各製品の場合:
私はGoogleで、次の解決策を検索します。 は、私はJSF +春を使用していたように、私はUIに次のブロックのコードを書いた:
<h:graphicImage value="/images/#{productControllerImpl.findProductImageById(product.id)}"/>
をそして、私のproductControllerImplに私はこれがあります。
@Override
public byte[] findProductImageById(Long productId) {
byte[] productImage = null;
HttpServletResponse response = (HttpServletResponse) FacesContext.getCurrentInstance().getExternalContext().getResponse();
ServletOutputStream outputStream = null;
try {
productImage = productService.findProductImageById(productId);
response.reset();
outputStream = response.getOutputStream();
response.setContentType("image/png");
outputStream.write(productImage);
outputStream.flush();
outputStream.close();
} catch(Throwable e){
throw new RuntimeException("Error processing product image: " + e.getMessage(), e);
}
return null;
}
だから、基本的に私は、反復からproducItを受け付けておりますが、データベース上でそれぞれの製品イメージを検索します(これが最善の選択であるかどうかわかりません)。
このページにアクセスしたときにここでの問題は、私は、ブラウザで完全なイメージを受け、次のとおりです。
そして私はかなりこの部分に迷ってしまいました。
私がここで紛失しているものは誰か知っていますか?
ありがとうございます。
こんにちはVeernarM:
BalusCによるこの投稿は、すべてのあなたの問題を解決します。 あなたのお手伝いをよろしくお願いします。 outputStream.flush()を削除しようとしました。 outputStream.close(); しかし、結果は同じです。 =(StreamedContentについては 、それはPrimeFacesライブラリである、と私のアプリケーションは、単に画像を表示するために、これらすべてのprimefacesライブラリと非常に重くなります。 私はOminiFacesを使用しようとしましたが、それが唯一のJava CDIで動作します。=( ブラウザで画像が全画面表示されるのはなぜですか? – THIAGORC
おそらくCSS /ページエラーとして表示するxhtmlページをさらに追加し、サーブレットとは関係ないと思うでしょう。 – VeenarM
私は以下のアプローチでこれを解決できました: 私のプロジェクトにApache Commons Codecの依存関係を追加しました。 そしてDTOにはBase64.encodeBase64Stringによって返される文字列を追加した: productDTO.setImage(Base64.encodeBase64String(productT.getImage()))。 productT.getImage()は、データベースからのBLOBデータであるbyte []を返します。 私のxhtmlでは、 (タグでも動作します)というタグを追加しました。 問題は解決しました。 ありがとう誰もがこのソリューションが同じ問題を持つ他の開発者を助けることを願っています。 =) –
THIAGORC