我有一个应用程序调用一个服务,该服务返回一个 Json 字符串,其中包含大约十个图像作为字节数组。我遍历 Json 字符串并提取图像并将它们转换为 StreamedContent 并将它们放入一个对象中,然后使用具有该图像的图像和名称的对象填充一个列表。我试图在带有 PrimeFaces 标记的 JSF 页面中显示这些图像,但图像没有显示。我的代码如下:
ImageBackingBean
private String sku;
private StreamedContent image;
private List<ImageBackingBean> imageList;
public String getSku(){
return sku;
}
public void setSku(String sku){
this.sku = sku;
}
public StreamedContent getImage() {
FacesContext context = FacesContext.getCurrentInstance();
if(context.getRenderResponse()){
return new DefaultStreamedContent();
}else{
String id = context.getExternalContext().getRequestParameterMap().get("sku");
List<ImageBackingBean> list = getImageList();
for(ImageBackingBean bean : list){
if(bean.getSku().equalsIgnoreCase(id)){
return bean.getImage();
}
}
}
return image;
}
public void setImage(StreamedContent image) {
this.image = image;
}
public List<ImageBackingBean> getImageList(){
return imageList;
}
public void setImageList(List<ImageBackingBean> imageList){
this.imageList = imageList;
}
public String getImageFromDatabase() throws IOException{
setImageList(DBImages.getImages());
if(getImageList() == null){
return "error";
}
return "success";
}
我的 JSF 页面很简单,如下:
<h:dataTable var="items" value="#{imageBackingBean.imageList}">
<h:column>
<p:graphicImage value="#{items.image}">
<f:param name="sku" value="#{items.sku}" />
</p:graphicImage>
</h:column>
</h:dataTable>
我在网上阅读的所有内容都告诉我这就是我需要显示动态图像的方式。我不应该将图像存储为列表中的 StreamedContent 类型吗?