p:dataGrid中的p:graphicImage只显示空白图像

3

我正在尝试使用字节数组(作为保存在数据库中的BLOB)来返回StreamedContent到p:datagrid中的p:graphicImage,如下所示:

<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是用来查询数据库的。我已经打印出了结果图像的字节数,并确认它是正常的,但仍然无法显示图像...另外一个问题是item(用户实体)不能访问数据库中的图像,因为设计上有限制。
谢谢...
1个回答

3
在这种情况下,binding属性让我感觉你可能没有正确使用它。请将其删除。value属性似乎也没有指向UIData的迭代变量#{item}
请相应地进行修复。
<p:graphicImage width="100" height="100" value="#{item.image}">

然后,Item类应该有一个带有getter的private StreamedContent image属性。

如果由于Item类的某些设计限制而不是选项,则您确实需要显示#{imagestickiesController}代码,因为它肯定是整个罪魁祸首。


我会检查迭代项和设计限制,并很快回来告诉你结果... - lionheart
我已经编辑了问题并检查了限制,发现该项无法获取图像,因此将imagestickiesController放在后面。 - lionheart
据说,如果我使用文件图像的链接而不是StreamedContent进行工作,它可以正常工作...但我不希望处理文件链接,因为我的解决方案不考虑处理文件系统...有没有可能使用StreamedContent来处理图像? - lionheart

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接