Java 加载一组带有素面的图像

Java 加载一组带有素面的图像,java,jsf,primefaces,Java,Jsf,Primefaces,我有下一个代码来加载一组图像,这些图像的流位于名为names的数据模型中。我的问题是,当我在p:datatable标记中声明var时,似乎什么都没有。有什么想法吗? 谢谢 移除。您只能读取一次流。下次不能重读 至于p:graphicImage部分,您需要为其输入DefaultStreamedContent的值。另请参见。p:graphicImage使用另一个请求,因此您需要像这样向managedBean传递标识符 <p:dataTable value="#{productManaged.

我有下一个代码来加载一组图像,这些图像的流位于名为names的数据模型中。我的问题是,当我在p:datatable标记中声明var时,似乎什么都没有。有什么想法吗? 谢谢


移除
。您只能读取一次流。下次不能重读


至于
p:graphicImage
部分,您需要为其输入
DefaultStreamedContent
的值。另请参见。

p:graphicImage使用另一个请求,因此您需要像这样向managedBean传递标识符

<p:dataTable value="#{productManaged.products}" var="productIterated">
     <p:column>
          <f:facet name="header">
               <h:outputText value="#{product.pic}"/>
          </f:facet>
          <p:graphicImage value="#{productManaged.dynamicProductImage}">
               <f:param name="product_id" value="#{productIterated.id}"/>
          </p:graphicImage>
     </p:column>
</p:dataTable>

或者,您可以在花费数小时来实现我为这个问题找到的许多解决方案(即包括参数或属性)的过程后阅读此线程:

不需要任何库吗?,我的意思是,defaultStreamedContent到达标记,但问题并没有消失为了防止堆栈溢出成为指向其他站点的一组链接,如果您能简要总结一下您找到的解决方案,那就太好了。
<p:dataTable value="#{productManaged.products}" var="productIterated">
     <p:column>
          <f:facet name="header">
               <h:outputText value="#{product.pic}"/>
          </f:facet>
          <p:graphicImage value="#{productManaged.dynamicProductImage}">
               <f:param name="product_id" value="#{productIterated.id}"/>
          </p:graphicImage>
     </p:column>
</p:dataTable>
public StreamedContent getDynamicProductImage() {
       String id = FacesContext.getCurrentInstance()
                       .getExternalContext().getRequestParameterMap().get("product_id");
       if(id!=null && this.products!=null && !this.products.isEmpty()){
           Integer productId = Integer.parseInt(id);
           for(Product productTemp:this.products){
               if(productTemp.getId().equals(productId)){
                   return new DefaultStreamedContent(
                        new ByteArrayInputStream(productTemp.getImage()),                            
                             productTemp.getMimeType());
               }
           }
       }
       return new DefaultStreamedContent(
                        new ByteArrayInputStream(this.products.get(0).getImage()), 
                             this.products.get(0).getMimeType()); //if you return null here then it won't work!!! You have to return something.
}