ADF Skin切替--css経路を置き換えて肌切替を実現
一般的なADFスタイルの切り替え方法では、ページをリフレッシュする必要があります.この場合、特に3番目のjsコントロールを使用する場合、さまざまな問題が発生します.この問題を解決するためにlinkラベルのcssパスを直接置き換える方式で実現することを考えた.
ADFが観察されるスタイルパスは以下の通りである.
/contextPath/adf/styles/cache/green-desktop-q78b4x-zh-ltr-safari-cmp.css
赤い部分はADFフレームワークが自動的に生成するcssファイル名であり、主な問題は現在のskinに対応するcssファイルのパスをどのように取得するかである.
これらのcssファイルの名前を観察すると、ブラウザによって生成されるcssファイルも異なると推測できます.テストでこれらのcssファイルが発見されたのは、必要に応じてのみ生成されます.
退屈な試みの末、ついに実現した.
1).皮膚の場所を切り替え、ページを更新する操作を取り除き、skinFamilyだけを変更すると、cssファイルの生成がトリガーされます.
2).ページにbeforePhaseメソッドを追加してcssファイル名を取得
ADFが観察されるスタイルパスは以下の通りである.
/contextPath/adf/styles/cache/green-desktop-q78b4x-zh-ltr-safari-cmp.css
赤い部分はADFフレームワークが自動的に生成するcssファイル名であり、主な問題は現在のskinに対応するcssファイルのパスをどのように取得するかである.
これらのcssファイルの名前を観察すると、ブラウザによって生成されるcssファイルも異なると推測できます.テストでこれらのcssファイルが発見されたのは、必要に応じてのみ生成されます.
退屈な試みの末、ついに実現した.
1).皮膚の場所を切り替え、ページを更新する操作を取り除き、skinFamilyだけを変更すると、cssファイルの生成がトリガーされます.
2).ページにbeforePhaseメソッドを追加してcssファイル名を取得
RenderingContext context = RenderingContext.getCurrentInstance();
if (phaseEvent.getPhaseId() == PhaseId.RENDER_RESPONSE && context != null) {
CoreRenderingContext carc = (CoreRenderingContext)context;
StyleContext styleContext = carc.getStyleContext();
StyleProvider styleProvider = styleContext.getStyleProvider();
List uris = styleProvider.getStyleSheetURIs(styleContext);
if (CollectionUtils.isEmpty(uris)) {
return;
}
String uri = uris.get(0);// css
// js css