0

我正在寻找一个关于如何根据给定模板动态创建 jsf 页面的好主意。

以下是要求:

用户有几个模板,他可以从中选择一个。显示所选模板,并且对于模板中的每个占位符,用户可以选择他想要在给定占位符中显示的内容。可以是表格、图表等……这个配置保存在数据库中,在用户登录时显示给用户。

现在构建模板很容易:

    <div class="top-left" >
         <ui:insert name="top-left"/>
     </div>
    <div class="top-right" >
        <ui:insert name="top-right"/>
    </div>

当我尝试这样做时,问题就开始了:

<ui:decorate template="#{myBean.template}.xhtml" >
    <ui:repeat value="#{myBean.placeholders}" var="placeholder" >
        <ui:define name="#{placeholder}">    //FaceletException: name Must be Literal
            //display here the chosen component (chart, table ect...)
        </ui:define>
    </ui:repeat>
</ui:decorate>

任何想法都非常感谢!

编辑: 似乎我将不得不放弃带有动态名称的 ui:define '因为尽管在规范中它可以在实现中指定为值表达式

  • 莫哈拉 2.x
  • 我的面孔 2.x
  • Facelets 1.x

它应该是一个字面量。

4

1 回答 1

1

您必须区分 JSF 中的标记处理程序和组件。构建视图时执行标记处理程序,而渲染页面时执行组件。基本上,在构建视图时不小心将它们混合在一起可能会给您带来问题。

基本上,ui:decorate标签ui:define在构建视图时运行。ui:repeat标签尚未呈现,因此这意味着您的迭代将无法正确执行。c:forEach在这种情况下你必须坚持。看看我的问题

除此之外,我坚信 JSF 不是您想要完成的工作的最合适的工具,因为它对您正在寻找的东西有很大的限制。

于 2013-06-08T10:44:49.410 回答