【发布时间】:2011-09-06 04:00:44
【问题描述】:
我有一个界面定义明确的应用程序。它使用 CDI 来解析模块,(特别是它使用 API 接口上的 Instance 注入点来解析模块)并通过接口将各种数据传回和第四次传递而不会出现问题。我有意将 API 和实现分开,并且模块仅从 API 继承以避免紧密耦合,并且应用程序仅通过运行时依赖关系知道模块,并且通过 API 完成数据传递。应用程序在没有模块的情况下运行良好,只需将 jar 放入 WEB-INF/lib 文件夹并重新启动应用服务器即可添加。
我遇到的问题是我希望模块创建视图的一部分,因此我想以可移植的方式调用 JSF 组件,或者按顺序从模块中包含让它呈现它的视图。我已经解决了我想要调用的模块,并且已经准备好对模块接口的引用。我最初想这样做的方式是做一个 ui:include 要求模块提供它的视图模板在哪里,但我不知道如何以有意义的方式回答该查询,因为视图解析是从应用程序完成的根目录,而不是库根目录。
执行摘要是,我不知道如何使用 JSF 为 .xhtml(模板/组件)文件跨越从应用程序到库的差距。
使用 CC 会很好,但我如何指定我在运行时需要一个特定的 CC 实例,而不是将那个硬编码到页面中?
我当然可以直接调用应用程序代码并要求它进行标记,但这似乎很暴力,一旦我有了标记,我不确定如何告诉 JSF 对其进行评估。也就是说,我可以想象一个组件会采用资源路径,获取标记并评估它,返回完整的标记,我只是不知道如何实现。
如果可能的话,我宁愿避免强迫模块开发人员采用繁重的 UIComponent 方法,这意味着要么采用动态方式执行 ui:include(或其他等效方式),要么采用动态方式调用 CC。 (我不介意在应用程序中编写一次 UIComponent 方法,如果这样可以让模块开发人员的生活更轻松)
关于我应该在哪里解决这个问题有什么建议吗? (如果我先找到答案,我会在这里发布)
【问题讨论】:
-
真是个好问题!我对自己感兴趣的一个。我希望有人有一个很好的答案来分享。
-
@maple_shaft 这是否回答了您的问题,还是我需要打开一个关于构建模块化 JSF 2.0 应用程序的社区 wiki?在这一点上,这对我来说非常简单,但这并不意味着每个阅读本文的人都可以这样做。
-
是的,这对我来说很有意义。在我当前的项目结束后的稍后时间,我计划重构通用模块以在未来的应用程序中重用,并且想知道如何做到这一点。我喜欢这个问题,所以我现在可以参考它。谢谢你的提问!
标签: java jsf-2 cdi jboss-weld modular