我有一个界面定义明确的应用程序。它使用 CDI 来解析模块,(特别是它使用 API 接口上的 Instance<> 注入点来解析模块)并通过接口将各种数据传回和第四次传递而没有问题。我有意将 API 和实现分开,并且模块仅从 API 继承以避免紧密耦合,并且应用程序仅通过运行时依赖关系知道模块,并且通过 API 完成数据传递。应用程序在没有模块的情况下运行良好,只需将 jar 放入 WEB-INF/lib 文件夹并重新启动应用服务器即可添加。
我遇到的问题是我希望模块创建视图的一部分,因此我想以可移植的方式调用 JSF 组件,或者从模块中包含它以便拥有它呈现其视图。我已经解决了我想要调用的模块,并且已经准备好对模块接口的引用。我最初想到的方法是做一个 ui:include 要求模块提供它的视图模板在哪里,但我不知道如何以有意义的方式回答该查询,因为视图解析是从应用程序完成的根目录,而不是库根目录。
执行摘要是,我不知道如何使用 JSF 为 .xhtml(模板/组件)文件跨越从应用程序到库的差距。
使用 CC 会很好,但是我如何指定我想要在运行时使用特定的 CC 实例,而不是将其硬编码到页面中?
我当然可以直接调用应用程序代码并要求它进行标记,但这似乎很暴力,一旦我有了标记,我不确定如何告诉 JSF 对其进行评估。也就是说,我可以想象一个组件会采用资源路径,获取标记并评估它,返回完整的标记,我只是不知道如何实现它。
如果可能的话,我宁愿避免强迫模块开发人员采用繁重的 UIComponent 方法,这意味着要么是动态的 ui:include (或类似的)方式,要么是调用 CC 的动态方式。(我不介意在应用程序中编写一次 UIComponent 方法,如果这样可以让模块开发人员的生活更轻松)
关于我应该在哪里解决这个问题的任何建议?(如果我先找到答案,我会在这里发布答案)