Есть ли способ заставить графическое изображение в Primefaces выполнять метод "value" только по требованию? - PullRequest
0 голосов
/ 11 февраля 2019

Я хочу показать пользовательскую галерею с несколькими миниатюрами.При нажатии на один из них отображается оверлейная панель, содержащая графическое изображение с изображением более высокого качества.Поскольку изображения высокого качества имеют размер около 5 МБ каждое, я просто хочу загрузить их по требованию.

Я уже пытался использовать атрибут «rendered», но это тоже не помогло.Я также попробовал "onclick" с функцией javascript, но это также не дало ожидаемого результата.

<p:graphicImage value="#{dataHolderBean.imageHolderBean.loadFullSizeImage()}"
class="centeredImageOverlay" cache="false">
<f:param name="currentImageId" value="#{images.imageId}" />
</p:graphicImage>

Я хотел бы просто вызвать value = "# {dataHolderBean.imageHolderBean.loadFullSizeImage ()}"этот метод, при нажатии на другое изображение.

Ответы [ 2 ]

0 голосов
/ 11 февраля 2019

Вы можете использовать встроенный LazyDefaultStreamedContent в вашем bean-компоненте для ленивой инициализации потока:

streamedContent = new LazyDefaultStreamedContent("application/vnd.ms-excel", "myExcel") {
    @Override
    protected InputStream initStream()
    {
          return new FileInputStream(...);
    }
};
0 голосов
/ 11 февраля 2019

Почему вы не искали решение, которое загружает содержимое оверлейной панели лениво?Для меня это звучит как гораздо более общее решение (тогда все, что внутри него будет загружено лениво), вы стоите и у вас больше шансов на то, что что-то уже реализовано.

Из витрины PrimeFaces p:overlayPanel (выделенная шахта)

Панель наложения

OverlayPanel - это общий компонент контейнера, который можетналожение других компонентов на странице.Примечательными особенностями являются пользовательское позиционирование, настраиваемые события и эффекты. Ленивая загрузка содержимого для сокращения времени загрузки страницы также поддерживается с помощью динамического параметра, когда включен overlayPanel, который загружает содержимое непосредственно перед отображением.

Из документации PrimeFaces

Динамический режим

Динамический режим позволяет выполнять отложенную загрузку содержимого, в этом режиме содержимое панели не отображается при загрузке страницы и загружается непосредственно перед отображением панели.Кроме того, содержимое кэшируется, поэтому последовательные показы не загружают содержимое снова.Эта функция полезна для уменьшения размера страницы и уменьшения времени загрузки страницы.

Таким образом, отложенная загрузка выполняется с помощью атрибута dynamic, который имеет пример даже в витрине

<p:commandButton id="movieBtn" value="Dynamic" type="button" />
<p:overlayPanel id="moviePanel" for="movieBtn" hideEffect="fade" dynamic="true" style="width:600px" modal="true">
    ...
</p:overlayPanel>
...