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