我想显示一个带有几个缩略图的自定义画廊。单击其中之一时,会显示一个覆盖面板,其中包含带有较高质量图像的图形图像。由于高质量图像每张大约5MB,因此我只想按需加载它们。
我已经尝试使用“ rendered”属性,但这似乎也不起作用。我也尝试使用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()}”此方法。
答案 0 :(得分:3)
您为什么不寻找一种懒惰地加载覆盖面板内容的解决方案?对我来说,这听起来像是一个通用得多的解决方案(然后它里面的任何东西都会被延迟加载),并且您已经站起来,并且已经实施的可能性更高。
来自p:overlayPanel
(强调我的)的PrimeFaces展示柜
覆盖面板
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>
答案 1 :(得分:2)
您可以在bean中使用内置的LazyDefaultStreamedContent来懒惰初始化流:
streamedContent = new LazyDefaultStreamedContent("application/vnd.ms-excel", "myExcel") {
@Override
protected InputStream initStream()
{
return new FileInputStream(...);
}
};