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