Spl*_*ity 25 java modular cdi jsf-2 jboss-weld
我有一个具有良好定义的界面的应用程序.它使用CDI来解析模块,(特别是它使用API接口上的Instance <>注入点来解析模块)并通过接口传回各种数据而没有问题.我故意将API和实现分开,并且模块仅从API继承以避免紧密耦合,并且应用程序仅通过运行时依赖性知道模块,并且通过API完成数据传递.应用程序在没有模块的情况下运行正常,只需将jar放入WEB-INF/lib文件夹并重新启动应用服务器即可添加.
我遇到的问题是我希望模块创建视图的一部分,因此我想以可移植的方式调用JSF组件,或者从模块中执行包含以获取它渲染它的观点.我已经解决了我想要调用的模块,并准备好了对模块接口的引用.我最初认为这样做的方法是做一个ui:include要求模块提供它的视图模板的位置,但我不知道如何以有意义的方式回答该查询,因为视图解析是从应用程序完成的root,而不是库根.
执行摘要是我不知道如何使用JSF为.xhtml(模板/组件)文件从应用程序跳到库.
使用CC会很好,但是如何在运行时指定我想要一个特定的CC实例,而不是将其硬编码到页面中?
我当然可以直接调用应用程序代码并要求它进行标记,但这似乎是非常强大的,一旦我有了标记,我就不确定如何告诉JSF来评估它.也就是说,我可以想象一个组件可以获取资源路径,获取标记并对其进行评估,返回完成的标记,我只是不知道如何实现它.
如果可能的话,我宁愿避免强制模块开发人员采用重型UIComponent方法,这意味着要么采用动态方式执行ui:include(或某些等效方法),要么采用动态方式调用CC.(我不介意在应用程序中编写UIComponent方法ONCE,如果这是使模块开发人员的生活更轻松的话)
关于我应该在哪里找出这个问题的任何建议?(如果我先找到答案,我会在这里发布答案)
Bal*_*usC 33
我知道您的问题基本上归结为如何在JAR中包含Facelets视图?
您可以通过ResourceResolver在JAR中放置自定义来完成此操作.
public class FaceletsResourceResolver extends ResourceResolver {
private ResourceResolver parent;
private String basePath;
public FaceletsResourceResolver(ResourceResolver parent) {
this.parent = parent;
this.basePath = "/META-INF/resources"; // TODO: Make configureable?
}
@Override
public URL resolveUrl(String path) {
URL url = parent.resolveUrl(path); // Resolves from WAR.
if (url == null) {
url = getClass().getResource(basePath + path); // Resolves from JAR.
}
return url;
}
}
Run Code Online (Sandbox Code Playgroud)
在webapp中配置web.xml如下:
<context-param>
<param-name>javax.faces.FACELETS_RESOURCE_RESOLVER</param-name>
<param-value>com.example.FaceletsResourceResolver</param-value>
</context-param>
Run Code Online (Sandbox Code Playgroud)
想象一下,你有一个/META-INF/resources/foo/bar.xhtmlin random.jar,那么你可以通常的方式包括它
<ui:include src="/foo/bar.xhtml" />
Run Code Online (Sandbox Code Playgroud)
甚至是动态的
<ui:include src="#{bean.path}" />
Run Code Online (Sandbox Code Playgroud)
注意:自Servlet 3.0和更新的JBoss/JSF 2.0版本以来,ResourceResolver如果将文件保存在文件/META-INF/resources夹中,则不需要整个方法.以上ResourceResolver仅在Servlet 2.5或更旧的JBoss/JSF版本中是强制性的,因为它们在META-INF资源解析方面存在缺陷.
| 归档时间: |
|
| 查看次数: |
13062 次 |
| 最近记录: |