バイト配列(DBに保存されたBLOB)を使用して、StreamedContentをp:graphicImageに返します。これはap:datagridの内部です。p:graphicImage inside p:dataGridには空白の画像しか表示されません
<p:dataGrid id="dtResults" rows="10" columns="3"
value="#{searchResultsController.items}" var="item">
<p:column>
<p:panel header="#{item.displayName}" style="text-align:center">
<h:panelGrid columns="1" style="width:100%">
<p:graphicImage binding="#{imagestickiesController.imageforuserid}"
width="100" height="100" value="#{imagestickiesController.image}">
<f:attribute name="uID" value="#{item.userID}" />
</p:graphicImage>
<h:outputText id="lAboutMe" value="#{item.aboutMe}"/>
</h:panelGrid>
</p:panel>
</p:column>
</p:dataGrid>
これは空白の画像を返します。なぜ誰かがアイデアを持っていますか?
加えた:この文脈で ImagestickiesControllerの一部である:
public class ImagestickiesController {
private GraphicImage imageforuserid;
public GraphicImage getImageforuserid(){
return imageforuserid;
}
public void setImageforuserid(GraphicImage gi){
imageforuserid = gi;
}
public StreamedContent getImage(){
System.out.println("In getImage");
System.out.println(imageforuserid);
System.out.println(imageforuserid.getAttributes().get("uID"));
Long value = (Long)imageforuserid.getAttributes().get("uID");
if (value!=null)
{
Imagestickies curr = ejbFacade.FindByUserID(value);
if (curr!=null)
{
System.out.println(curr);
InputStream is = new ByteArrayInputStream(curr.getStickies().getContent());
StreamedContent res = new DefaultStreamedContent(is);
return res;
}
}
return null;
}
}
ejbFacadeがDBに問い合わせを行います。私は結果として得られたイメージのサイズをバイト単位で表示していましたが、それはOKですが、まだ画像は表示されませんでした... もう1つのことは、項目(Userエンティティ)デザインで。
おかげで...この特定の文脈で
私は反復されたアイテムとデザインの制限をチェックし、すぐに結果が返ってきます... – lionheart
制限をチェックしてアイテムがイメージを取得できないことを確認した後、imagestickiesControllerを入れました... – lionheart
おそらく、もし私がStreamedContentの代わりにファイルイメージへのリンクを作っていれば、それは動作しますが、私の解決策はファイルシステムの処理を考慮していないので、ファイルリンケージを処理しないことを望みます。 StreamedContentを使用して画像を処理するには? – lionheart