I can't seem to work out how to add SessionInitListener to a Vaadin 8.1 OSGI portlet running on Liferay 7.
In Vaadin 7 and Liferay 6.x it was done by simply defining a custom implementation of VaadinPortlet. Any help would be much appreciated.
This is possible. There is no need for a custom Portlet implementation.
All that is required is to add a SessionInitListener in the UI init method.
@Override
protected void init(final VaadinRequest vaadinRequest) {
vaadinRequest.getService().addSessionInitListener(this::sessionInit);
Combined with a lambda, you can manupulate the HTML like this.
private void sessionInit(final SessionInitEvent sessionInitEvent) {
sessionInitEvent.getSession().addBootstrapListener(new BootstrapListener() {
@Override
public void modifyBootstrapFragment(final BootstrapFragmentResponse response) {
Element myDiv = new Element(Tag.valueOf("div"), "");
myDiv.append("<h1>Extra HTML!</h1>");
List<Node> nodes = response.getFragmentNodes();
for (Node node : nodes) {
myDiv.appendChild(node);
}
nodes.clear();
nodes.add(myDiv);
}
@Override
public void modifyBootstrapPage(final BootstrapPageResponse bootstrapPageResponse) {
}
});
}