Jsf 有没有办法让Primefaces中的graphicimage执行;“价值”;仅按需使用方法?

Jsf 有没有办法让Primefaces中的graphicimage执行;“价值”;仅按需使用方法?,jsf,primefaces,graphicimage,Jsf,Primefaces,Graphicimage,我想展示一个带有几个缩略图的自定义图库。单击其中一个按钮时,将显示一个覆盖面板,其中包含一个图形图像,该图像的质量更高。由于高质量的图像大约每个5MB,我只想按需加载它们 我已经尝试过使用“rendered”属性,但这似乎也不起作用。我还使用javascript函数尝试了“onclick”,但也没有得到预期的结果 <p:graphicImage value="#{dataHolderBean.imageHolderBean.loadFullSizeImage()}" class="cent

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

为什么不寻找加载覆盖面板内容的解决方案?对我来说,这听起来像是一个更通用的解决方案(里面的任何东西都会被懒散地加载),你站在那里,而且有更高的可能性已经实现了

p:overlypanel
的PrimeFaces展示区(强调矿山)

覆盖面板

OverlayPanel是一个通用容器组件,可以覆盖其他组件 第页上的组件。显著特点是定制定位, 可配置的事件和效果延迟内容加载以减少页面 启用时,动态选项也支持加载时间 OverlyPanel将在显示内容之前加载内容。

从PrimeFaces文档中

动态模式

在这种情况下,动态模式允许延迟加载内容 面板的模式内容不会在页面加载时呈现,而只是加载 在显示面板之前。此外,内容被缓存,以便连续显示 不要再次加载内容。此功能有助于降低成本 页面大小和减少页面加载时间

因此,延迟加载是通过
dynamic
属性完成的,该属性甚至在


...

您可以使用bean中内置的LazyDefaultStreamedContent来延迟初始化流:

streamedContent = new LazyDefaultStreamedContent("application/vnd.ms-excel", "myExcel") {
    @Override
    protected InputStream initStream()
    {
          return new FileInputStream(...);
    }
};

为什么不寻找一个加载覆盖面板内容的解决方案呢?听起来像是一个更通用的解决方案,而且已经存在的可能性更高implemented@Kukeltje这是个好主意!但是仍然找不到有效的解决方案:/always,always,always,always尝试在特定问题后面看到更一般的问题。那么,找到解决方案的机会就大得多了。PF showcase有一个有效的解决方案…非常感谢!你真的帮了我。从现在起,我还将尝试寻找更多通用的解决方案。我已经为此工作了好几天了,没什么进展:/干杯!这也适用于图像吗?那什么时候装?我有点看不到(这很可能与我有限的观点/知识有关)这将解决上述问题中的某些问题。如果您可以添加一些解释,那将非常好(并且值得一次投票)。好吧,这并不能解决我的问题,但它通过替换我的“DefaultStreamedContent”帮助了我。非常感谢。
streamedContent = new LazyDefaultStreamedContent("application/vnd.ms-excel", "myExcel") {
    @Override
    protected InputStream initStream()
    {
          return new FileInputStream(...);
    }
};