我需要根据用于访问该应用程序的主机名来设置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);
                    }
                }
            }


但这会导致一些无法解决的问题,也许可以解决,但我仍然无法通过以这种骇人听闻的方式更改bootstrap js的方式感到不适。

有没有办法勾结到引导js的创建位置?

最佳答案

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

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

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

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

10-04 14:49