我需要根据用于访问应用的主机名设置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);
}
}
}
但是这会导致一些人可能会解决的逃避问题,但是通过改变引导程序js这种黑客方式我感觉不太好。
有没有办法挂钩创建bootstrap js的位置?
答案 0 :(得分:1)
使用覆盖 getTheme 方法的自定义public String getTheme(UICreateEvent event) {...}
怎么样?
VaadinServletService
另一种解决方案可能是extendinf public String getConfiguredTheme(VaadinRequest request) {...}
并覆盖 getConfiguredTheme 。
<div><form id="login" action="" method="POST">
<div id="login-form-parent" class="wsite-form-container" style="margin-top: 0px;margin-right: 0px; margin">
<h2 class="wsite-content-title" style="text-align: center;">
<span style="font-size: large;">Please enter your credentials</span></h2>
<div>
<div style= "text-align: center";>
<label class="wsite-form-label" for="name">Username</label>
<div>
<input id="input-616817079299148233" class="wsite-form-input wsite-input wsite-input-width-370px" name="username" type="text" />
</div>
</div>
</div>
<div style="margin-top: 15px;margin-bottom: 15px;"></div>
<div>
<div style="text-align: center";>
<label class="wsite-form-label" for="password">Password</label>
<div>
<input id="input-984837360768012607" class="wsite-form-input wsite-input wsite-input-width-370px" name="pwd" type="password" />
</div>
</div>
</div>
</div>
<div style="display: none; visibility: hidden;"><input name="wsite_subject" type="text" />
</div>
<div style="text-align: center; margin-top: 10px; margin-bottom: 0px;">
<input name="form_version" type="hidden" value="2" />
<input id="wsite-approved" name="wsite_approved" type="hidden" value="approved" />
<input name="ucfid" type="hidden" value="login" />
<input style="position: absolute; top: 0; left: -9999px; width: 1px; height: 1px;" type="submit" />
<a class="wsite-button">
<span class="wsite-button-inner">Submit</span></a></div>
</form></div>