p:imageImage里面的p:dataGrid只显示空白图像

时间:2011-08-09 19:15:33

标签: jsf-2 primefaces

我正在尝试使用字节数组(作为保存在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向数据库发出查询。我已经打印出结果图像的大小,以字节为单位,看到它没问题,但图像仍未显示... 另一件事是由于设计的限制,项目(用户实体)无法访问数据库中的图像。

...谢谢

1 个答案:

答案 0 :(得分:3)

此特定上下文中的binding属性并不能让我感觉您正确使用它。去掉它。 value属性似乎也没有指向UIData的迭代变量#{item}

相应修复。

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

Item类应具有private StreamedContent image属性,并带有getter。

如果这不是Item课程中某些设计限制的选项,那么你真的必须展示你的#{imagestickiesController}代码,因为它绝对是罪魁祸首。