我正在尝试使用字节数组(作为保存在DB中的BLOB)将StreamedContent返回到p:graphicgmage,即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向数据库发出查询。我已经打印出结果图像的大小,以字节为单位,看到它没问题,但图像仍未显示... 另一件事是由于设计的限制,项目(用户实体)无法访问数据库中的图像。
...谢谢
答案 0 :(得分:3)
此特定上下文中的binding
属性并不能让我感觉您正确使用它。去掉它。 value
属性似乎也没有指向UIData
的迭代变量#{item}
。
相应修复。
<p:graphicImage width="100" height="100" value="#{item.image}">
Item
类应具有private StreamedContent image
属性,并带有getter。
如果这不是Item
课程中某些设计限制的选项,那么你真的必须展示你的#{imagestickiesController}
代码,因为它绝对是罪魁祸首。