我有一个显示公司的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人的个人资料图片并且不参加参数工作很棒! 。我不明白为什么公司的徽标没有出现在页面中:/
任何人都可以帮我解决这种情况或提出另一种展示图片的方式吗?
提前致谢。
答案 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/