我需要根据用于访问应用的主机名来设置vaadin应用的主题,例如app.company.de使用“valo”,app.company.org使用“org-theme”。 如果我在UI类中设置了编程UI,我会得到一个“闪烁”,因为首先使用来自@Theme
的主题。 我也试图通过增加BootstrapListener
这样的修改引导页:按主机名设置vaadin主题
@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);
}
}
}
但是,这导致了一些逃避问题,其中之一可能会解决,但我仍然不觉得通过改变引导JS的好这样一种拙劣的方式。
有没有办法挂钩到创建引导js的地方?
我不知道这将是一个完美的解决方案,但如果您使用的是Apache HTTP服务器,你可以添加一个重写规则/ VAADIN /主题/ VALO/*到/ VAADIN /主题/ org-theme/*根据请求标题 –
您是什么时候设置主题的?在UI类的'init'方法中? –
@SteffenHarbich如果你在'init'中设置它,你会得到闪烁效果,至少对我来说它是7.7.3。奇怪的是,如果我尝试在构造函数中设置它,它没有任何作用......我得到了“驯鹿”的外观和感觉,并且我没有找到任何有关此行为的参考,我想知道这是否是期望的行为... – Morfic