首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >是否有一种方法可以在Primefaces中只在需要时执行"value“方法?

是否有一种方法可以在Primefaces中只在需要时执行"value“方法?
EN

Stack Overflow用户
提问于 2019-02-11 09:30:41
回答 2查看 343关注 0票数 2

我想展示一个有几个缩略图的定制画廊。当单击其中之一时,将显示一个覆盖面板,其中包含具有更高质量图像的图形图像。由于高质量的图像是5MB左右每个,我只是想加载他们的需求。

我已经尝试使用“呈现”属性,但这似乎也做不到。我还使用javascript函数尝试了"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()}“这个方法。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-02-11 09:51:43

为什么不寻找一个加载覆盖面板延迟内容的解决方案?对我来说,这听起来像是一个更通用的解决方案(在它里面的任何东西都会被加载、懒惰)--您站在那里,并且更有可能已经实现了。

从PrimeFaces展示的p:overlayPanel(强调地雷)

覆盖面板 OverlayPanel是一个通用容器组件,可以在页面上覆盖其他组件。值得注意的功能是定制定位、可配置事件和效果。动态选项也支持加载延迟内容以减少页面加载时间,当启用overlayPanel时,将在显示之前加载内容。

来自PrimeFaces文档

动态模式 动态模式允许延迟加载内容,在此模式中,面板的内容不会在页面加载上呈现,而是在显示面板之前加载。同时,内容被缓存,因此连续显示不再加载内容。此特性对于减少页面大小和减少页面加载时间非常有用。

所以延迟加载是通过dynamic属性完成的,即使在showcase中也有一个示例

代码语言:javascript
运行
复制
<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>
票数 3
EN

Stack Overflow用户

发布于 2019-02-11 15:02:53

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

代码语言:javascript
运行
复制
streamedContent = new LazyDefaultStreamedContent("application/vnd.ms-excel", "myExcel") {
    @Override
    protected InputStream initStream()
    {
          return new FileInputStream(...);
    }
};
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54627443

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档