В C ++ объект производного класса может быть назначен объекту базового класса, но другой способ невозможен.
class Base { int x, y; };
class Derived : public Base { int z, w; };
int main()
{
Derived d;
Base b = d; // Object Slicing, z and w of d are sliced off
}
Обрезка объектов происходит, когда объект производного класса присваивается базе объект класса, дополнительные атрибуты объекта производного класса вырезаются для формирования объекта базового класса.
Вы должны иметь в виду, что компонент graphicImage
отображается на странице. Он отображает элемент HTML <img>
. В браузере запрос будет сделан для страницы JSF, а затем последующие запросы будут выполняться и для каждого изображения на странице.
Эти изображения поступают из сервлета ресурсов PrimeFaces, а не FacesServlet, это означает, что область действия управляемого компонента и его свойства, вероятно, неприменимы.
Попробуйте сначала загрузить блоб в массив байтов, затем это, вероятно, начнет работать.
EDIT: см. мой следующий ответ на этот похожий вопрос. графическое изображение не рендерит streamedcontent в Primefaces
mmm I 99% уверен, что <p:graphicImage
не работает с ui: повторите, у вас будет много проблем с этим (потому что я сделал XD), я рекомендую вам создать сервлет и служить изображениям в качестве входного потока (там есть много примеров).
Я не понимаю, зачем вам это нужно. Вы можете просто создать сервлет, который получит изображение из базы данных с отображением «/images/yourimage.jpg».
Вот быстрый учебник с соответствующим кодом в нем о том, как это сделать.
Спасибо BalusC. Я сделал это, установив целое число в бэк-компоненте и присвоив ему значение diffent при обновлении ByteArray для изображения. Это целое число служит уникальным идентификатором изображения. Затем я устанавливаю это целое число как значение <f:param>
в <p:graphicImage>
на странице.
тег изображения выглядит как
<p:graphicImage value="#{empBean.image}">
<f:param name="id" value="#{empBean.imageId}" />
</p:graphicImage>`
и устанавливает изображение в фоновом режиме как
if(user.getPicture()!=null){
imageId = (int) new Date().getTime();
BinaryStreamImpl bs = new BinaryStreamImpl(user.getPicture());
//picture is byte[] property in user class
this.image = new DefaultStreamedContent(bs.getInputStream(), "image/png");
}
Теперь он работает хорошо.
InputStream is = new ByteArrayInputStream((byte[]) yourBlobData);
myImage = new DefaultStreamedContent(is, "image/png");
на странице jsf;
<p:graphicImage value="#{controller.myImage}" style="width:200px;width:500px" />
ImageService
? – John 3 May 2016 в 07:04Image
. Как он выполняет свою работу (JPA, JDBC, Hibernate, независимо) не представляет интереса для JSF. – BalusC 3 May 2016 в 07:06