2011-08-09 15 views
1

バイト配列(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エンティティ)デザインで。

おかげで...この特定の文脈で

答えて

1

binding属性は私にあなたがそれを正しい方法を使用している良い感じを与えるものではありません。それを除く。 value属性も、ののUIDataの反復変数を指しているようには見えません。

それに応じて修正してください。

<p:graphicImage width="100" height="100" value="#{item.image}"> 

Itemクラスは、ゲッターと、private StreamedContent image性質を持っている必要があります。

Itemクラスのデザイン制限のオプションでない場合は、実際には#{imagestickiesController}コードを必ず表示する必要があります。

+0

私は反復されたアイテムとデザインの制限をチェックし、すぐに結果が返ってきます... – lionheart

+0

制限をチェックしてアイテムがイメージを取得できないことを確認した後、imagestickiesControllerを入れました... – lionheart

+0

おそらく、もし私がStreamedContentの代わりにファイルイメージへのリンクを作っていれば、それは動作しますが、私の解決策はファイルシステムの処理を考慮していないので、ファイルリンケージを処理しないことを望みます。 StreamedContentを使用して画像を処理するには? – lionheart

関連する問題