Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JSF-动态创建页面_Jsf - Fatal编程技术网

JSF-动态创建页面

JSF-动态创建页面,jsf,Jsf,我正在寻找一个关于如何基于给定模板动态创建jsf页面的好主意 以下是要求: 用户有多个模板,他在其中选择一个。 将显示所选模板,对于模板中的每个占位符,用户可以选择要在给定占位符中显示的内容。它可以是一张表,一张图表等等。。。 此配置保存在数据库中,并在用户登录时显示给用户 现在,构建模板很容易: <div class="top-left" > <ui:insert name="top-left"/> </div>

我正在寻找一个关于如何基于给定模板动态创建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>

//FaceletException:名称必须是文字
//在此显示所选组件(图表、表格等)
任何想法都非常感谢

编辑: 似乎我将不得不放弃ui:define with dynamic name,因为在中,它可以在中指定为值表达式

  • 莫哈拉2.x
  • MyFaces2.x
  • Facelets 1.x

它应该是一个文本

在JSF中,标记处理程序和组件之间必须有所不同。虽然基本上,在构建视图时不小心地混合使用这两种方法可能会带来问题

基本上,
ui:decoration
ui:define
标记在构建视图时运行<代码>ui:repeat标记尚未呈现,因此这意味着您的迭代将无法正确执行。在这种情况下,您必须坚持使用
c:forEach
。看一看


由此看来,我坚信JSF并不是最适合你想要完成的工作的工具,因为它对你所寻找的东西有很大的限制。

你在这里的显示器中寻找HTML或JSF组件所选择的组件?你是对的,谢谢你的提示。你能推荐一个更合适的工具吗?我在c:forEach:javax.faces.view.facelets.FaceletException:必须是文字时也会遇到同样的错误