通过主机名设置 vaadin 主题

Set vaadin theme by hostname

我需要根据用于访问应用程序的主机名设置 vaadin 应用程序的主题,例如app.company.de 使用 "valo",app.company.org 使用 "org-theme"。 如果我在 UI class 中设置 UI 编程,我会得到 "flicker",因为首先使用 @Theme 中的主题。 我还尝试通过添加 BootstrapListener 来修改 bootstrap 页面,如下所示:

            @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);
                    }
                }
            }

但这会导致一些转义问题,这些问题可能会解决,但我仍然觉得以这种 hacky 方式更改 bootstrap js 感觉不太好。

有没有办法连接到 bootstrap js 的创建位置?

使用覆盖 getTheme 方法的自定义 UIProvider 怎么样?

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

另一个解决方案可以是 extendinf VaadinServletService 并覆盖 getConfiguredTheme.

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