wysiwyg コンテンツやテンプレート編集などの基本的なサイト管理機能を提供するアプリケーション用の小さな CMS を作成しました。ページはデータベースに facelets として保存され、カスタム URL リゾルバー ( https://community.jboss.org/message/495515#495515の最後の投稿を参照) を使用してクライアントに提示されます。これは、別のページのサポートを開始するまでは非常にうまく機能していました。同じアプリケーションによって提供される異なるドメインのツリー (apache の仮想ホストに少し似ています)。
したがってhttp://firstdomain/cms/page.xhtml
、 とは異なるページにつながるはずですhttp://seconddomain/cms/page.xhtml
。ここでの問題は、カスタム DefaultResourceResolver (およびその他のリゾルバー) によって解決された URL が、パス (/cms/page.xhtml) のみを使用して JSF によってキャッシュされることです。そのため、最初に照会されたドメインが何であれ、要求されたドメインに関係なく、同じパスへのすべての要求に対してキャッシュされた URL を提供します。
この問題をキャッシングに突き止めるのにかなりの時間がかかりましたが、今は立ち往生しています。要求されたドメイン名を尊重するために JSF の URL キャッシュを変更/上書き/無効にする方法はありますか?
更新 1: FaceletCacheImpl.java の myfaces 実装を読んだところ、URL 自体がキャッシュのキーであり、パスだけではないことに気付きました。これは、ここで説明する問題につながります: java.net.URL のハッシュコードがホストを IP に解決するのはなぜですか? - URL は、ホスト名ではなく IP アドレスを使用して比較されます。それでも、Facelets のキャッシュ動作を変更する必要があります。
更新 2: URL パラメーターを試してみたところ、FaceletCacheImpl.java で見たもの以外のパスによってのみ実際にキャッシュされているため、更新 1 は無視できることがわかりました。