有没有一种方法可以使Primefaces中的图形图像仅按需执行“值”方法?

时间:2019-02-11 09:30:41

标签: jsf primefaces graphicimage

我想显示一个带有几个缩略图的自定义画廊。单击其中之一时,会显示一个覆盖面板,其中包含带有较高质量图像的图形图像。由于高质量图像每张大约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()}”此方法。

2 个答案:

答案 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(...);
    }
};
相关问题