Загрузка набора изображений с простыми лицами - PullRequest
1 голос
/ 25 мая 2010

У меня есть следующий код для загрузки набора изображений, чьи потоки находятся в модели данных, называемой именами. Моя проблема в том, что когда я объявляю var внутри тега p: datatable, кажется, что он ничего не имеет. Любая идея? ТНХ!

<p:dataTable value="#{controlador.names}"  var="nombre" rendered="true">
                <p:column rendered="true">
                    <h:outputText value="#{nombre.stream}"/>
                    <p:graphicImage value="#{nombre.stream}"/>
                </p:column>
            </p:dataTable>

Ответы [ 3 ]

1 голос
/ 04 октября 2010

p: graphicImage использует другой запрос, поэтому вам нужно передать идентификатор в управляемый компонент следующим образом.

<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>

Еще одна вещь, о которой вы должны позаботиться, это вернуть что-то в StreamedContent или он потерпит крах. Сделайте что-то вроде этого:

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.
}

или вы можете прочитать эту тему http://primefaces.prime.com.tr/forum/viewtopic.php?f=3&t=4163

1 голос
/ 10 февраля 2012

Потратив часы на процесс реализации многих решений, которые я нашел для этой проблемы (например, включая параметр или атрибут), единственное решение, которое мне удалось найти, которое действительно работает, можно найти здесь: Контент с PrettyFaces

0 голосов
/ 25 мая 2010

Удалить <h:outputText>. Вы можете прочитать поток только один раз . Его нельзя перечитать в другой раз.

Что касается части p:graphicImage, вам необходимо указать значение DefaultStreamedContent. Также смотрите эту запись в блоге .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...