p: graphicImage внутри p: dataGrid показывает только пустые изображения - PullRequest
3 голосов
/ 09 августа 2011

Я пытаюсь использовать байтовый массив (как BLOB, сохраненный в БД), чтобы вернуть StreamedContent в p: graphicImage, который находится внутри p: datagrid, следующим образом:

<p:dataGrid id="dtResults" rows="10" columns="3"
    value="#{searchResultsController.items}" var="item">
    <p:column>
        <p:panel header="#{item.displayName}" style="text-align:center">
            <h:panelGrid columns="1" style="width:100%">
                <p:graphicImage binding="#{imagestickiesController.imageforuserid}"
                    width="100" height="100" value="#{imagestickiesController.image}">
                    <f:attribute  name="uID" value="#{item.userID}" />
                </p:graphicImage>
                <h:outputText id="lAboutMe" value="#{item.aboutMe}"/>
            </h:panelGrid>
        </p:panel>
    </p:column>
</p:dataGrid>

Этот возвращает пустые изображения. У кого-нибудь есть идеи почему?

ДОБАВЛЕНО: Часть ImagestickiesController в этом контексте:

  public class ImagestickiesController {

private GraphicImage imageforuserid;

public GraphicImage getImageforuserid(){
    return imageforuserid;
}

public void setImageforuserid(GraphicImage gi){
    imageforuserid = gi;
}

    public StreamedContent getImage(){
        System.out.println("In getImage");
        System.out.println(imageforuserid);
        System.out.println(imageforuserid.getAttributes().get("uID"));
        Long value = (Long)imageforuserid.getAttributes().get("uID");
        if (value!=null)
        {
           Imagestickies curr =  ejbFacade.FindByUserID(value);
           if (curr!=null)
           {
               System.out.println(curr);
                InputStream is = new ByteArrayInputStream(curr.getStickies().getContent());
                StreamedContent res = new DefaultStreamedContent(is);
                return res;
            }
        }
       return null;
    }
}

ejbFacade отправляет запрос в БД. Я напечатал размер полученного изображения в байтах и ​​увидел, что все в порядке, но изображение не отображается ... Другое дело, что элемент (сущность пользователя) не может достичь изображения в БД из-за ограничений в дизайне.

Спасибо ...

1 Ответ

3 голосов
/ 09 августа 2011

Атрибут binding в данном конкретном контексте не дает мне хорошего ощущения, что вы используете его правильно. Убери это. Атрибут value также, похоже, не указывает на итерационную переменную UIData #{item}.

Исправьте это соответствующим образом.

<p:graphicImage width="100" height="100" value="#{item.image}">

Класс Item должен иметь свойство private StreamedContent image с геттером.

Если это не вариант для некоторых ограничений дизайна в классе Item, то вам действительно нужно показать свой код #{imagestickiesController}, так как это определенно весь виновник.

...