3

JSF を使用した Spring Web Flow について質問があります。Spring Web Flow に、Tomcat Web アプリケーションのクラスパスにある jar からview="pages/view.xhtml"のような相対ビューをロードできるようにするにはどうすればよいですか? Google で調査した結果、Web Flow はそのままではこのコンスタレーションをサポートしていないと思います。

私の質問を理解するのを助けるために、おそらくいくつかのコンテキストがあります:クラスパスの jar、つまり、ファイル リソース フローはWEB-INF/conf のどこかにあり、jar ファイル内の同じ位置にあります。- フロー定義のビューは、フロー定義ファイルに対して相対的にアドレス指定されます

ここで、流れが存在できる場所に両方の星座があるのはなぜかという疑問を抱くかもしれません。現時点では、特定のドメインに属するすべての機能を含む多数の webapp モジュールから抽出しようとしています。このアプローチは、関連するすべてのアーティファクトを単一のプロジェクト内にバンドルし、jar としてビルドしてから webapp に追加することです。

構成ファイルがどこにあるかを知らなくても、各 jar の Spring Bean をロードしても問題はありませんが、Web フローはいくつかの問題を引き起こします。

最初の問題は、flowRegistry が事前に何かを行わないと分割できないモノリスであることです。この問題は、カスタム フロー レジストリによって解決されます。

しかし、ここで 2 番目の問題に直面しました。ビュー ステート内では、ドキュメントに記載されているように、フロー定義に対して相対的にページを参照します。

<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 ...

グーグルで検索すると、この可能な解決策が見つかりました: jar 内の webflows の回避策

しかし、複数のフロー レジストリに問題があるため、この回避策は機能しません。

別のオプションは、すべてを瓶に入れないことかもしれませんが、それがより良い考えかどうかはわかりません. jar 内のクラスパスからロードできるすべてのものと、定義された構造内の純粋なファイルとしての残りを持っている可能性があります。

何か案は?あなたの努力とヒントに感謝します。

4

1 に答える 1

2

質問の目標を達成する方法についてアプリケーションを数時間試してデバッグした後、私は自分でわずかに異なる解決策を見つけました。

  1. 最初に変更することは、サーブレット API 仕様の変更により、Tomcat 6 から Tomcat 7 に移行することでした。これにより、わずかな変更で問題を解決できました。
  2. ビューステートでの相対参照から絶対アドレス指定に切り替えました
  3. 新しいサーブレット API に適合するように、jar ファイルのディレクトリ構造を変更しました。JSF または Spring Webflow に必要なすべてのファイル リソースは、META-INF/resources に配置する必要がありました ( ServletContext の Javadoc を参照して、メソッド getResource を探してください。必要だった)

これらの 3 つの手順により、Webflow とそのリソースを jar ファイルに完全にパックすることができました。

于 2012-03-15T20:22:01.350 に答える