我对使用JSF的Spring Web Flow有一个疑问:我如何教Spring Web Flow能够从jar中加载相对视图,如 view =“pages / view.xhtml” tomcat webapp的classpath?经过谷歌的一些研究后,我认为,Web Flow并不支持这个开箱即用的星座。
也许有些背景,以帮助理解我的问题: - 流程在多个FlowRegistries中注册(我通过实现自定义实现解决了这个问题,该实现在Spring上下文中查找所有flowRegistries) - 流可以作为类路径外的文件资源驻留,也可以作为类路径中的jar驻留,即文件资源流位于 WEB-INF / conf 中的某个位置,它们位于jar文件中的相同位置。 - 流定义中的视图相对于flow-definition-file
进行了处理现在你可能会问这个问题为什么我们有两个星座,流可以驻留在哪里。目前,我们正在尝试从包含属于某个域的所有功能的大量webapp模块中提取。方法是将所有相关的工件捆绑在一个项目中,该项目可以构建为jar并添加到webapp中。
虽然在不知道配置文件所在位置的情况下为每个jar加载Spring bean没有问题,但Web Flow会导致一些问题。
第一个问题是,flowRegistry是一个整体,如果不事先做一些事情就无法拆分。自定义流注册表解决了此问题。
但现在我遇到了第二个问题:在视图状态中,我们相对于流定义引用了页面,如documentation中所述:
<view-state id="some-id" view="pages/somepage.xhtml"> ... </view-state>
现在,当我进入这样的视图状态时,web流会抛出一个异常,告诉我这种方式不受支持:
A ContextResource is required to get relative view paths within this context;
the resource was ...
谷歌搜索提出了这个可能的解决方案: workaround for webflows in jars
但是这种解决方法无效,因为我的多流注册表存在问题。
另一个选择可能是不把所有东西放进罐子里,但我不确定这是不是更好的主意。可能拥有可以从jar中的classpath加载的所有东西,其余的作为定义结构中的纯文件。
有什么想法吗?非常感谢您的努力和提示。
答案 0 :(得分:2)
在尝试和调试我的应用程序如何完成问题的目标后,我发现了一个略有不同的解决方案。
这三个步骤使我能够将jarflow及其资源完全打包在jar文件中。