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

Java 从jar文件加载的流中的视图状态中的相对视图,java,spring,jsf,spring-webflow-2,Java,Spring,Jsf,Spring Webflow 2,关于使用JSF的SpringWebFlow,我有一个问题:如何教SpringWebFlow能够从TomcatWebApp类路径中的jar加载相对视图,如view=“pages/view.xhtml”?在通过谷歌进行了一些研究之后,我认为网络流量并不支持这种开箱即用的星座 也许是一些背景,来帮助理解我的问题: -流在多个FlowRegistries中注册(我通过实现一个自定义实现解决了这个问题,该实现在Spring上下文中查找所有FlowRegistries) -流可以作为类路径外的文件资源或类路

关于使用JSF的SpringWebFlow,我有一个问题:如何教SpringWebFlow能够从TomcatWebApp类路径中的jar加载相对视图,如view=“pages/view.xhtml”?在通过谷歌进行了一些研究之后,我认为网络流量并不支持这种开箱即用的星座

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

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

虽然在不知道配置文件位于何处的情况下为每个jar加载springbean没有问题,但是Web流会导致一些问题

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

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

谷歌搜索提出了这个可能的解决方案:

但是这个解决方法不起作用,因为它在我的多流注册中存在问题

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


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

在几个小时的尝试和调试之后,我自己找到了一个稍微不同的解决方案,关于如何实现问题的目标

  • 改变的第一件事是从Tomcat6升级到Tomcat7,因为ServletAPI规范发生了变化,这使我能够通过轻微的修改来解决我的问题
  • 我从视图状态中的相对引用切换到绝对寻址
  • 我更改了jar文件的目录结构以适应更新的ServletAPI:JSF或SpringWebflow所需的所有文件资源都需要放在META-INF/resources中(请参阅查找getResource方法,它指定了我需要的内容)
  • 这三个步骤使我能够将webflows及其资源完全打包到jar文件中

    <view-state id="some-id" view="pages/somepage.xhtml"> ... </view-state>
    
    A ContextResource is required to get relative view paths within this context;
    the resource was ...