Как показать изображения в p: dataGrid с помощью p: graphicImage - PullRequest
0 голосов
/ 07 февраля 2012

У меня есть p: dataGrid, который показывает компании. У этих компаний есть логотип, и я хочу показать их логотип
в dataGrid под их именами, но изображения не появляются на странице. Только появляется разбитое изображение квадрата.

Код xhtml;

 <p:dataGrid value="#{BDS_Company.companyList}" var="cmp" rows="5" columns="3">
       <p:column>
          <h:panelGrid columns="1">
             <h:outputLabel value="#{cmp.cmpName}"/>
             <h:outputLabel value="#{cmp.cmpEmail}"/>
             <p:graphicImage value="#{BDS_Company.companyLogo(cmp)}"/>
           </h:panelGrid>
       </p:column>
 </p:dataGrid>

Код управляемого компонента;

public DefaultStreamedContent companyLogo(BdsCompany company) {
        if (company != null) {
            if (company.getCmpLogo() != null) {
                InputStream is = new ByteArrayInputStream(company.getCmpLogo().getDocFile());
                return new DefaultStreamedContent(is);
            }
        }
        return null;
    }

Когда я меняю такой код, я делаю исключение: «Метод companyLogo не найден»

public DefaultStreamedContent getCompanyLogo(BdsCompany company) {
        if (company != null) {
            if (company.getCmpLogo() != null) {
                InputStream is = new     ByteArrayInputStream(company.getCmpLogo().getDocFile());
                return new DefaultStreamedContent(is);
            }
        }
        return null;
 }

Но другая страница, которую я использовал getPersonPicture (), которая показывает изображение профиля зарегистрированного человека и не принимает параметры, работает отлично! , Я не понимаю, почему логотипы компаний не появляются на странице: /

Кто-нибудь может мне помочь в этой ситуации или предложить другой способ показа изображений?

Заранее спасибо.

1 Ответ

2 голосов
/ 07 февраля 2012

Создание строкового URL (/images/company.png) вместо DefaultStreamedContent для значения graphicImage.Напишите сервлет, добавьте в web.xml и сопоставьте URL вашего изображения (/ images / *).

Сделайте что-нибудь с базой данных в сервлете doGet и верните поток изображения в качестве ответа.

http://rajivas.wordpress.com/tag/writing-directly-to-response-stream-in-jsf/

...