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