バイト配列として約 10 個の画像を含む Json 文字列を返すサービスを呼び出すアプリケーションがあります。Json 文字列をループして画像を取り出し、それらを StreamedContent に変換してオブジェクトに配置し、画像とその画像の名前を持つオブジェクトを List に入力します。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 タイプとしてリストに保存しないでください。