从jar文件加载的流中的视图状态中的相对视图

我有一个关于使用JSF的Spring Web Flow的问题:我如何教Spring Web Flow能够从tomcat webapp的类路径中的jar加载相对视图,例如view =“pages / view.xhtml” ? 经过谷歌的一些研究后,我认为,Web Flow不支持这个开箱即用的星座。

也许是一些上下文,以帮助理解我的问题: – 流程在多个FlowRegistries中注册(我通过实现自定义实现解决了这个问题,该实现在Spring上下文中查找所有flowRegistries) – 流可以作为文件资源驻留在类路径之外或者在类路径中的jar,即文件资源流位于WEB-INF / conf中的某个位置,它们位于jar文件中的相同位置。 – 流定义中的视图相对于流定义文件进行了处理

现在你可能会问这个问题为什么我们有两个星座,流可以驻留在哪里。 目前,我们正在尝试从一大堆包含属于某个域的所有function的webapp模块中提取。 该方法是将所有相关的工件捆绑在一个项目中,该项目可以构建为jar并随后添加到webapp中。

虽然在不知道配置文件所在位置的情况下为每个jar加载Spring bean没有问题,但Web Flow会导致一些问题。

第一个问题是,flowRegistry是一个整体,如果不事先做一些事情就无法拆分。 自定义流注册表解决了此问题。

但现在我遇到了第二个问题:在视图状态中,我们相对于流定义引用页面,如文档中所述:

 ...  

现在,当我进入这样的视图状态时,Web流会抛出exception,这告诉我不支持这种方式:

 A ContextResource is required to get relative view paths within this context; the resource was ... 

谷歌搜索引出了这个可能的解决方案: 在jar子里的webflows的解决方法

但是这种解决方法不起作用,因为它对我的多流注册表有问题。

另一个选择可能是不把所有东西放进jar子里,但我不确定这是不是更好的主意。 可能拥有可以从jar中的类路径加载的所有内容,其余部分可以作为定义结构中的纯文件加载。

有任何想法吗? 非常感谢您的努力和提示。

经过几个小时的尝试和调试我的应用程序如何完成问题的目标后,我发现了一个略有不同的解决方案。

  1. 要改变的第一件事是从Tomcat 6升级到Tomcat 7,因为servlet API规范发生了变化,这使我能够通过略微修改来解决我的问题
  2. 我从视图状态中的相对引用切换到绝对寻址
  3. 我更改了我的jar文件的目录结构以适应更新的servlet API:需要将JSF或Spring Webflow所需的所有文件资源放在META-INF / resources中(参见ServletContext的Javadoc查找方法getResource,它指定了什么我需要)

这三个步骤使我能够将jarflow及其资源完全打包在jar文件中。