JSF2:在运行时构建 JSF2 视图(整个组件树)

Posted

技术标签:

【中文标题】JSF2:在运行时构建 JSF2 视图(整个组件树)【英文标题】:JSF2: Building JSF2 views (whole component trees) at runtime 【发布时间】:2011-07-31 14:39:02 【问题描述】:

目前我正在尝试 JSF 2.0,并且仍在学习更高级的功能。 当必须处理 预定义 视图(固定组件树)时,JSF2 很舒服,这些视图的小部件在编译时是完全已知的——当然,除了重复数据列表/表格条目和轻微的动态修改之外通过 DataTable 的“技巧”(正如我在这里读到的,尤其是在 JSF2, can I add JSF components dynamically? 和 How to create dynamic JSF 1.2 form fields 下)。

现在我想知道完全动态的 JSF2 组件树的实现,其中 Web 用户对于每个给定的内容类型(例如“Person”、“PersonList”以及“PersonalManagementPanel”)可以从列表中选择一个内容类型兼容的小部件(=JSF 自定义组件)。 因此,该用户将始终看到使用他/她首选的“PersonalManagerPanel”呈现的“个人经理页面”,而后者又会使用用户的首选变体呈现其嵌套组件(“Person”、“PersonList”)。

显然,目标是在运行时获得一个选择性可配置/可定制的 JSF 页面。

    这个场景可以在 JSF2 中实现吗? -- 这怎么可能?

    是否有更适合此要求的 Java 技术? -- 我正在考虑的一种可能的替代方法是 XML 加 XSLT。

非常感谢您的帮助和建议。

最好的问候 马丁

【问题讨论】:

【参考方案1】:

你可以这样使用:

<ui:include src="#bean.template" />

或者如果你想要更复杂的组件,你应该看看PreRenderViewEvent。

请注意,这两种解决方案都存在问题。

http://java.net/jira/browse/JAVASERVERFACES_SPEC_PUBLIC-770 http://java.net/jira/browse/JAVASERVERFACES-1708 http://java.net/jira/browse/JAVASERVERFACES-2041

【讨论】:

以上是关于JSF2:在运行时构建 JSF2 视图(整个组件树)的主要内容,如果未能解决你的问题,请参考以下文章

JSF 2.0:跨多个视图保留组件状态

如何在 Ajax 请求期间在 JSF2 中动态添加组件

JSF2 - 为啥渲染响应不重新渲染组件设置?

JSF2 - 由 EJB 或 ManagedBean 支持?

从 JSF2 中的操作导航时如何传递视图参数?

JSF 2 -- 保存所有有效的组件值