java - 动态 <ui :include> doesn't work

标签 java spring jsf-2

我想使用动态 ui:include,就像这样。

<ui:repeat value="#{FormsService.getTemplates(component.form)}"
                var="template">
    <ui:include src="forms/#{template.id}.xhtml"/>
</ui:repeat>

不知何故,这总是会导致包含“forms/.xhtml”,就好像 #[template.id} 为空一样。 但我知道#{template.id}不为空。 IE。只是像这样打印出来就给了我预期的值(value)。那么这里出了什么问题呢?如有任何帮助,我们将不胜感激。

最佳答案

这些标签有些令人困惑,因为 是作为 UIComponent 实现的,而 逻辑位于 TagHandler 中。当构建组件树时,例如在 RestoreView 阶段,会添加单个 UIRepeat 组件,但 #{template.id} 将无法正确评估。它不会评估,因为 UIRepeat 变量"template"仅在组件处理期间可用,而在树构建期间不可用。

你有两个选择。第一个是您可以使用 而不是 。这是一个简单的解决方案,可能会很适合您。它有一个小缺点:如果同一模板多次出现,则组件树将为每次出现的模板组件包含一个单独的副本。因此,内存和 CPU 性能都会受到影响。

另一个选择是使用真正的动态包含组件。不幸的是我还没有找到可用的。我设法实现了这样的组件,但它不是一个非常方便的解决方案,因为它还需要稍微修改的 UIRepeat 版本。我们必须采用这种方法,因为 的性能损失对我们来说太严重了。

关于java - 动态 <ui :include> doesn't work,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5745643/

相关文章:

java - 在 JFreeChart 堆叠 3D 条形图中更改自定义颜色

java - Spring Boot 中的 RestController 中未找到 404

jsf-2 - PrettyFaces:制作所有jsf页面 "extension-less"

java - 创建具有固定存在期限的自定义范围

java - 如何显示 <h :selectOneMenu> in a <h:outputText>? 的选定值的标签

java - 模板方法模式

java - Mockito 在测试中没有模拟来自 Controller 的功能

java - SWT 应用程序中布局的目的是什么?

spring - 如何使用 Spring Data ElasticSearchTemplate 保存对象

java - Spring Data Rest not working——寻找无限递归错误的根源