2016-09-30 12 views
1

アプリにアクセスするために使用するホスト名に応じて、vaadinアプリのテーマを設定する必要があります。 app.company.deは「valo」を使用し、app.company.orgは「org-theme」を使用します。 UIクラスでUIをプログラム的に設定すると、最初に@Themeのテーマが使用されているため、「フリッカー」が発生します。 私もこのようなBootstrapListenerを追加することにより、ブートストラップページを修正しようとしました:ホスト名でバージンテーマを設定する

  @Override 
      public void modifyBootstrapPage(BootstrapPageResponse response) { 
       Document doc = response.getDocument(); 
       for (Element script : doc.getElementsByTag("script")) { 
        if (script.html().contains("\"theme\": \"valo\"")) { 
         String old = script.html(); 
         String newHtml = old.replace("valo", THEME_NAME); 
         script.html(newHtml); 
        } 
       } 
      } 

しかし、これは1が解決するかもしれないいくつかのエスケープの問題につながるが、それでも私は、ブートストラップJS Aを変更して良い感じはありませんそのようなハッキーなやり方。

ブートストラップjsが作成される場所にフックする方法はありますか?

+0

VALO/*/VAADIN /に/それはエレガントな解決策になるかどうかは知りませんが、Apache HTTPサーバを使用している場合は、/ VAADIN /テーマを書き換えルールを追加することができますthemes/org-theme/*リクエストヘッダに基づいて –

+0

テーマはいつ設定しましたか? UIクラスの 'init'メソッドで? –

+0

@SteffenHarbich 'init'で設定すると、少なくとも私にとっては7.7.3でちらつき効果が得られます。変わったことは、コンストラクタで設定しようとすると効果がないことです...私は「トナカイ」のルック&フィールを得ました。この動作については何の参考も見つかりませんでした。希望の動作... – Morfic

答えて

1

UIProviderの代わりにのgetThemeを使用するとどうなりますか?

public String getTheme(UICreateEvent event) {...}

別の解決策は、VaadinServletServiceをextendinfとgetConfiguredThemeを上書きすることができます。

public String getConfiguredTheme(VaadinRequest request) {...}

+0

UIProviderを拡張しています。あなたは 'UICreateEvent'から' HttpServletRequestWrapper'にキャストせずにrequestURLに到達する方法を知っていますか? – dve

+0

少なくともキャストを行う必要があります。しかし、このようにHttpServletRequestWrapperにキャストするのを避けることができます '((VaadinServletRequest)uiCreateEvent.getRequest())。getHttpServletRequest()' –

関連する問題