我想展示一个有几个缩略图的定制画廊。当单击其中之一时,将显示一个覆盖面板,其中包含具有更高质量图像的图形图像。由于高质量的图像是5MB左右每个,我只是想加载他们的需求。
我已经尝试使用“呈现”属性,但这似乎也做不到。我还使用javascript函数尝试了"onclick“,但这也没有产生预期的结果。
<p:graphicImage value="#{dataHolderBean.imageHolderBean.loadFullSizeImage()}"
class="centeredImageOverlay" cache="false">
<f:param name="currentImageId" value="#{images.imageId}" />
</p:graphicImage>
当单击另一个图像时,我只想调用value="#{dataHolderBean.imageHolderBean.loadFullSizeImage()}“这个方法。
发布于 2019-02-11 09:51:43
为什么不寻找一个加载覆盖面板延迟内容的解决方案?对我来说,这听起来像是一个更通用的解决方案(在它里面的任何东西都会被加载、懒惰)--您站在那里,并且更有可能已经实现了。
从PrimeFaces展示的p:overlayPanel
(强调地雷)
覆盖面板 OverlayPanel是一个通用容器组件,可以在页面上覆盖其他组件。值得注意的功能是定制定位、可配置事件和效果。动态选项也支持加载延迟内容以减少页面加载时间,当启用overlayPanel时,将在显示之前加载内容。
来自PrimeFaces文档
动态模式 动态模式允许延迟加载内容,在此模式中,面板的内容不会在页面加载上呈现,而是在显示面板之前加载。同时,内容被缓存,因此连续显示不再加载内容。此特性对于减少页面大小和减少页面加载时间非常有用。
所以延迟加载是通过dynamic
属性完成的,即使在showcase中也有一个示例
<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>
发布于 2019-02-11 15:02:53
您可以在bean中使用内置的LazyDefaultStreamedContent来延迟初始化流:
streamedContent = new LazyDefaultStreamedContent("application/vnd.ms-excel", "myExcel") {
@Override
protected InputStream initStream()
{
return new FileInputStream(...);
}
};
https://stackoverflow.com/questions/54627443
复制相似问题