【问题标题】:Integrate external JSF view at runtime在运行时集成外部 JSF 视图
【发布时间】:2013-04-09 07:28:53
【问题描述】:

问题描述

我使用带有自建 JSF UI 的工作流引擎。引擎中的某些进程使用所谓的用户任务。这些任务在我的 JSF 前端中呈现,并且包含必须由用户填写的中小型表单。工作流前端应该是完全通用的——它不应该知道处理了哪些任务或哪些类型的任务。因此,我想不在 JSF 应用程序中定义这些任务表单。表单应该沿着相关流程“存在”,因此在工作流引擎中。这很重要,否则每次将更改应用于任何次要表单时,都必须重新部署前端应用程序。
因此,我想从引擎中获取表单(基本上是.xhtml 文件)并将其作为简单的 JSF 视图添加到应用程序中。如果用户想要完成一项任务,则应拉取并呈现相应的 JSF 表单。

我想在运行时将 JSF 组件(或整个视图)集成到我的应用程序中,因此在构建或启动时完全未知。

我怎样才能做到这一点?这甚至可能吗?

提前致谢!

【问题讨论】:

  • 您不想用<h:panelGroup rendered="#{someBean.someondition}">.....</h:panelGroup>render 将这两个元素包裹在<f:ajax 中吗?
  • @Daniel 也许我的问题中没有明确描述。我不想有条件地渲染组件。我想在运行时添加 JSF 元素,因此在编译或启动时完全未知。这两个元素只是一个例子。
  • @fnst 有时,最好的通用问题是具体的。也许如果您向我们展示了针对您的特定问题的 UI 原型,那么我们可以为您提供有关如何使用 JSF 做到这一点的想法。
  • @fnst start here
  • @elias 我重写了问题描述添加了一些背景信息。展示代码示例很困难,因为它实际上是一个通用问题。我不想添加一个特定的组件——它可以,因为它是可能的,每个 JSF 组件。感谢您的提示!

标签: java jsf jsf-2


【解决方案1】:

对于 JSF 组件,您绝对可以通过编程方式创建它们。在这里回答:How to create dynamic JSF form fields。请注意,对于 JSF 2.x,这个概念没有什么不同。只有时机;您需要在视图构建期间运行它。父级上的<f:event type="postAddToView"> 是理想的钩子。或者,在父级的 binding 属性的 getter 中懒惰地执行此操作,但这会破坏视图范围,并且 bean 肯定需要在请求范围内。

对于 JSF 视图,您需要创建一个自定义的ResourceResolver。具体示例可以在those answers 中找到,其中包括Obtaining Facelets templates/files from an external filesystem or database

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-25
    相关资源
    最近更新 更多