ADF Skin切替--css経路を置き換えて肌切替を実現

1314 ワード

一般的な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ファイル名を取得
                    
        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