按主机名设置vaadin主题

时间:2016-09-30 12:19:29

标签: java vaadin vaadin7

我需要根据用于访问应用的主机名设置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的位置?

1 个答案:

答案 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>