Vaadin 8 向 html head 标签添加代码的方式是什么?
What is the Vaadin 8 way of adding code to the html head tag?
Other SO answers 建议覆盖 ApplicationServlet.writeAjaxPageHtmlHeader
,但我在 Vaadin 8 中找不到那些 classes 和方法。
我在 com.vaadin.server.VaadinServlet
或 com.vaadin.ui.UI
中找不到任何类似的内容。
有 @JavaScript
注释,但如果我将它放在我的 UI class 上,该脚本将为我的应用程序的每个页面加载。我只需要在一个特定页面上使用它。
最初的 HTML 页面在 Vaadin 中称为 bootstrap 页面。 Book of Vaadin.
中有一些文档可以提示您正确的方向
在Vaadin 8中,您需要在会话中添加BootstrapListener。您可以通过在 VaadinServlet 中添加 SessionInitListener 来获取已创建的会话。
注册会话
此示例将 Vaadin 与 Spring Boot 一起使用,但在不使用 Spring Boot 时也适用相同的原则。
@Component("vaadinServlet")
@WebServlet(urlPatterns = "/*", name = "BootstrapVaadinServlet", asyncSupported = true)
@VaadinServletConfiguration(ui = BoostrapUi.class, productionMode = false)
public class BootstrapVaadinServlet extends SpringVaadinServlet {
private static final Logger logger = LoggerFactory.getLogger(BootstrapVaadinServlet.class);
@Override
protected void servletInitialized() throws ServletException {
super.servletInitialized();
getService().addSessionInitListener(this::addBoostrapListenerOnSessionInit);
}
private void addBoostrapListenerOnSessionInit(SessionInitEvent sessionInitEvent) {
sessionInitEvent.getSession().addBootstrapListener(new AppBootstrapListener());
}
}
实现html头部标签修改
public class AppBootstrapListener implements BootstrapListener {
@Override
public void modifyBootstrapFragment(BootstrapFragmentResponse bootstrapFragmentResponse) {
}
@Override
public void modifyBootstrapPage(BootstrapPageResponse res) {
Elements headTags = res.getDocument().getElementsByTag("head");
Element head = headTags.get(0);
head.appendChild(metaExample(res.getDocument()));
}
private Node metaExample(Document document) {
Element meta = document.createElement("meta");
meta.attr("author", "Me");
return meta;
}
}
如果使用插件没问题,试试HeaderTags
Overview
Using this add-on, you can define tags to add to the host page by
adding annotation to your UI class.
插件使用示例中的示例
@MetaTags({
// Replaces the Vaadin X-UA-Compatible header
@Meta(httpEquiv = "X-UA-Compatible", content = "hello"),
@Meta(name = "test", content = "test") })
// And showing how to create a link tag as well
@Link(rel = "foobar", href = "about:blank")
public class DemoUI extends UI {
...
}
Other SO answers 建议覆盖 ApplicationServlet.writeAjaxPageHtmlHeader
,但我在 Vaadin 8 中找不到那些 classes 和方法。
我在 com.vaadin.server.VaadinServlet
或 com.vaadin.ui.UI
中找不到任何类似的内容。
有 @JavaScript
注释,但如果我将它放在我的 UI class 上,该脚本将为我的应用程序的每个页面加载。我只需要在一个特定页面上使用它。
最初的 HTML 页面在 Vaadin 中称为 bootstrap 页面。 Book of Vaadin.
中有一些文档可以提示您正确的方向在Vaadin 8中,您需要在会话中添加BootstrapListener。您可以通过在 VaadinServlet 中添加 SessionInitListener 来获取已创建的会话。
注册会话
此示例将 Vaadin 与 Spring Boot 一起使用,但在不使用 Spring Boot 时也适用相同的原则。
@Component("vaadinServlet")
@WebServlet(urlPatterns = "/*", name = "BootstrapVaadinServlet", asyncSupported = true)
@VaadinServletConfiguration(ui = BoostrapUi.class, productionMode = false)
public class BootstrapVaadinServlet extends SpringVaadinServlet {
private static final Logger logger = LoggerFactory.getLogger(BootstrapVaadinServlet.class);
@Override
protected void servletInitialized() throws ServletException {
super.servletInitialized();
getService().addSessionInitListener(this::addBoostrapListenerOnSessionInit);
}
private void addBoostrapListenerOnSessionInit(SessionInitEvent sessionInitEvent) {
sessionInitEvent.getSession().addBootstrapListener(new AppBootstrapListener());
}
}
实现html头部标签修改
public class AppBootstrapListener implements BootstrapListener {
@Override
public void modifyBootstrapFragment(BootstrapFragmentResponse bootstrapFragmentResponse) {
}
@Override
public void modifyBootstrapPage(BootstrapPageResponse res) {
Elements headTags = res.getDocument().getElementsByTag("head");
Element head = headTags.get(0);
head.appendChild(metaExample(res.getDocument()));
}
private Node metaExample(Document document) {
Element meta = document.createElement("meta");
meta.attr("author", "Me");
return meta;
}
}
如果使用插件没问题,试试HeaderTags
Overview
Using this add-on, you can define tags to add to the host page by adding annotation to your UI class.
插件使用示例中的示例
@MetaTags({
// Replaces the Vaadin X-UA-Compatible header
@Meta(httpEquiv = "X-UA-Compatible", content = "hello"),
@Meta(name = "test", content = "test") })
// And showing how to create a link tag as well
@Link(rel = "foobar", href = "about:blank")
public class DemoUI extends UI {
...
}