Am trying to pass message from popup window to the parent window -
package com.example.vaadinexperiments;
import java.io.Serializable;
import java.lang.reflect.Method;
import javax.servlet.annotation.WebServlet;
import com.vaadin.annotations.Theme;
import com.vaadin.annotations.VaadinServletConfiguration;
import com.vaadin.server.BrowserWindowOpener;
import com.vaadin.server.VaadinRequest;
import com.vaadin.server.VaadinServlet;
import com.vaadin.ui.Alignment;
import com.vaadin.ui.Button;
import com.vaadin.ui.Button.ClickEvent;
import com.vaadin.ui.Component;
import com.vaadin.ui.JavaScript;
import com.vaadin.ui.Label;
import com.vaadin.ui.TextField;
import com.vaadin.ui.UI;
import com.vaadin.ui.VerticalLayout;
@SuppressWarnings(“serial”)
@Theme(“vaadinexperiments”)
public class VaadinexperimentsUI extends UI {
@WebServlet(value = "/*", asyncSupported = true)
@VaadinServletConfiguration(productionMode = false, ui = VaadinexperimentsUI.class)
public static class Servlet extends VaadinServlet {
}
@Override
protected void init(VaadinRequest request) {
final VerticalLayout layout = new VerticalLayout();
layout.setMargin(true);
setContent(layout);
BrowserWindowOpener opener = new BrowserWindowOpener(MyPopupUI.class);
opener.setFeatures("height=200,width=300,resizable");
Button button = new Button("Pop It Up");
opener.extend(button);
layout.addComponent(button);
addListener(new PopupCloseListener() {
@Override
public void popupClosed(PopupCloseEvent event) {
Label newLabel = new Label(event.message);
layout.addComponent(newLabel);
}
});
}
public static class MyPopupUI extends UI {
@Override
protected void init(VaadinRequest request) {
getPage().setTitle("Popup Window");
VerticalLayout content = new VerticalLayout();
final TextField textField = new TextField("You name please");
content.addComponent(textField);
content.setComponentAlignment(textField, Alignment.TOP_CENTER);
Button submitButton = new Button();
submitButton.addClickListener(new Button.ClickListener() {
@Override
public void buttonClick(ClickEvent event) {
String name = textField.getValue();
JavaScript.eval("close()");
getUI().close();
fireEvent(new PopupCloseEvent(getUI(), name));
}
});
content.addComponent(submitButton);
content.setComponentAlignment(submitButton, Alignment.MIDDLE_CENTER);
content.setSizeFull();
setContent(content);
}
}
public static class PopupCloseEvent extends Component.Event {
public String message = "";
public PopupCloseEvent(Component source, String message) {
super(source);
this.message = message;
}
}
public interface PopupCloseListener extends Serializable {
public void popupClosed(PopupCloseEvent event);
}
public void addListener(PopupCloseListener listener) {
try {
Method method = PopupCloseListener.class.getDeclaredMethod(
"popupClosed", new Class[] { PopupCloseEvent.class });
addListener(PopupCloseEvent.class, listener, method);
} catch (final java.lang.NoSuchMethodException e) {
throw new java.lang.RuntimeException(
"Internal error, popupClosed method not found");
}
}
public void removeListener(PopupCloseListener listener) {
removeListener(PopupCloseEvent.class, listener);
}
}
The popupClosed method in the invoking UI is not getting invoked. Any Idea?