[jsf] 在<ui:repeat>裡面的<p:graphicImage>中顯示數據庫blob圖像


Answers

我不明白為什麼你需要這個。 您可以創建一個servlet,它將使用映射“/images/yourimage.jpg”從數據庫中獲取圖像。

這是一個快速教程,其中包含有關如何執行此操作的相應代碼。

JSF - 在JSF中顯示來自數據庫的圖像

Question

我在JBoss 7.1.1上使用PrimeFaces 3.2。

我試圖在<ui:repeat>顯示存儲在MySQL數據庫中的BLOB中的圖像。 圖像存儲在byte[] ,然後轉換為StreamedContent ,如下所示:

InputStream stream = new ByteArrayInputStream(ingredient.getImage());
ingredient.setJsfImage(new DefaultStreamedContent(stream, "image/jpg"));

然後我試圖在Facelet中顯示如下:

<ui:repeat var="ingredient" value="#{formBean.ingredientResultSet}">
    <p:panel id="resultsPanel" header="#{ingredient.location.shopName}">
        <p:graphicImage value="#{ingredient.jsfImage}" alt="No picture set" />
...

但是,在加載頁面時,我在JBoss中收到以下錯誤:

SEVERE [org.primefaces.application.PrimeResourceHandler](http - 127.0.0.1-8080-12)流式動態資源出錯。

這是怎麼造成的,如何解決?




mmm我99%確定<p:graphicImage用於ui:重複你會遇到很多問題(因為我做了XD),我建議你創建一個servlet並將圖像作為輸入流提供(有一個那裡有很多例子)。




您必須記住graphicImage組件在頁面上呈現的內容。 它呈現給HTML <img>元素。 在瀏覽器中,將為JSF頁面發出請求,然後對頁面上的每個圖像也會發生後續請求。

這些映像來自PrimeFaces資源servlet而不是FacesServlet,這意味著Managed Bean的範圍及其屬性可能不適用。

嘗試首先將blob加載到字節數組中,然後這可能會開始工作。

編輯:請參閱我對此類似問題的以下回答。 graphicimage中沒有渲染streamedcontent的graphicimage




Related