【问题标题】:How to insert an exact copy of an element without regenerating it如何在不重新生成元素的情况下插入元素的精确副本
【发布时间】:2017-01-26 15:38:19
【问题描述】:

我正在处理许多 JSF 页面,其中包含有关站点主要主题的摘要。在大页面上,摘要在不同位置重复。它是通过定义元素,然后插入它来完成的:

<ui:define name="sommaire">
 <ui:include src="/sommaire/sommaire.xhtml">
  <ui:param name="contrat" value="#{form.contrat}" />
 </ui:include>
</ui:define>

后来在几个不同的地方:

<ui:insert name="sommaireContrat" />

问题是:summary有自己的backing bean和逻辑,每次被包含,逻辑都会重新执行并渲染一个新的html块。我想知道是否有一个标签使用生成的组件的副本而不涉及第二次 bean。 我愿意接受任何不会修改所包含内容的建议。

【问题讨论】:

  • 你为什么要这个?它现在的工作方式有什么问题?
  • @Kukeltje 对于每个插入,摘要的支持 bean 重新计算显示的信息(如平均花费等)。处理时间不多,但很明显也没有必要。
  • 那为什么不“缓存”这个计算值呢?或者试试omnifaces cache
  • omnifaces 缓存正是我想要的,但我不允许添加更多依赖项。我会和团队讨论这件事。谢谢你的提示。
  • 如果你使用 JSF 2.2,任何反对添加 OmniFaces 的人都应该被解雇... ;-)

标签: jsf jsf-2.2


【解决方案1】:

Omnifaces cache 最适合您不使用 PrimeFaces。

来自 Omnifaces 展示:

&lt;o:cache&gt; 组件允许缓存渲染标记的片段。 对包含此组件的页面的第一次请求将导致 将此标记放入缓存中。然后对于后续请求 直接使用缓存的内容,没有任何组件,支持 用于在 第一名将被咨询

如果您使用 PrimeFaces,PrimeFaces cache 也是您的选择。

来自 PrimeFaces 网站:

Cache 缓存组件用于通过缓存缓存来减少页面加载时间 初始渲染后全局缓存中的内容。各种缓存 支持提供程序,例如 ehcache 和 hazelcast。在这个例子中, 工具栏组件被缓存,输出将从缓存中检索。

它们之间存在一些差异。阅读他们的完整文档,看看哪个最适合

【讨论】:

  • 我真的很惊讶 JSF 不包括任何开箱即用的缓存,具有非常短的缓存历史的 PrimeFace 最适合我正在使用的东西。谢谢。
  • 嗯...在这方面,PrimeFaces 和 Omnifaces 缓存并没有真正的不同。所以我无法理解你的真正意思..
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-05
  • 1970-01-01
  • 2013-10-25
  • 1970-01-01
相关资源
最近更新 更多