如何使用p:graphicImage在p:dataGrid中显示图像

时间:2012-02-06 21:36:23

标签: java jsf jsf-2 primefaces

我有一个显示公司的p:dataGrid。这些公司有徽标,我想展示他们的标志
在dataGrid下的名称,但图像不会出现在页面中。只显示破损的图像方块。

xhtml代码;

 <p:dataGrid value="#{BDS_Company.companyList}" var="cmp" rows="5" columns="3">
       <p:column>
          <h:panelGrid columns="1">
             <h:outputLabel value="#{cmp.cmpName}"/>
             <h:outputLabel value="#{cmp.cmpEmail}"/>
             <p:graphicImage value="#{BDS_Company.companyLogo(cmp)}"/>
           </h:panelGrid>
       </p:column>
 </p:dataGrid>

托管bean代码;

public DefaultStreamedContent companyLogo(BdsCompany company) {
        if (company != null) {
            if (company.getCmpLogo() != null) {
                InputStream is = new ByteArrayInputStream(company.getCmpLogo().getDocFile());
                return new DefaultStreamedContent(is);
            }
        }
        return null;
    }

当我更改这样的代码时,我会将“Method companyLogo not found”

作为例外
public DefaultStreamedContent getCompanyLogo(BdsCompany company) {
        if (company != null) {
            if (company.getCmpLogo() != null) {
                InputStream is = new     ByteArrayInputStream(company.getCmpLogo().getDocFile());
                return new DefaultStreamedContent(is);
            }
        }
        return null;
 }

但另一个页面我使用了getPersonPicture()来显示loged人的个人资料图片并且不参加参数工作很棒! 。我不明白为什么公司的徽标没有出现在页面中:/

任何人都可以帮我解决这种情况或提出另一种展示图片的方式吗?

提前致谢。

1 个答案:

答案 0 :(得分:2)

为graphicImage值创建一个DefaultStreamedContent的String url(/images/company.png)。编写一个servlet,添加到web.xml并映射您的图像URL(/ images / *)。

在servlet doGet中对数据库执行任何操作,并将图像流作为响应返回。

http://rajivas.wordpress.com/tag/writing-directly-to-response-stream-in-jsf/