【问题标题】:Dynamic <ui:include> doesn't work动态 <ui:include> 不起作用
【发布时间】:2011-04-21 14:40:53
【问题描述】:

我想使用动态 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。像这样打印出来就给了我预期的价值。那么这里出了什么问题呢?任何帮助表示赞赏。

【问题讨论】:

    标签: java spring jsf-2


    【解决方案1】:

    这些标签有些混乱,因为 是作为 UIComponent 实现的,而 逻辑在 TagHandler 中。构建组件树时,例如在 restoreView 阶段,会添加一个 UIRepeat 组件,但 #{template.id} 不会正确评估。它不会评估,因为 UIRepeat 变量“模板”仅在组件处理期间可用,而不是在树构造期间可用。

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

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

    【讨论】:

    • 对我不起作用。我认为这是因为整个部分已经嵌套在 facelet 中,如果您尝试将 JSTL 与它一起使用,这似乎会导致一些问题。所以我也会对你的解决方案感兴趣。非常感谢。
    猜你喜欢
    • 1970-01-01
    • 2011-05-31
    • 1970-01-01
    • 2014-09-04
    • 1970-01-01
    • 1970-01-01
    • 2011-07-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多