vaadin - 如何更改 Vaadin 7 应用程序的主视图?

标签 vaadin vaadin7

我想编写一个 Vaadin 7 应用程序(参见下面的 MyVaadinUI),它要求用户输入用户名和密码。

如果它们是正确的,则应出现另一个 View (请参阅下面的 MainUI)并占据整个区域(替换登录 View )。

我尝试在 MyVaadinUI.goToMainWindow 方法中实现此转换,但出现错误

java.lang.RuntimeException: Component must be attached to a session when getConnectorId() is called for the first time
    at com.vaadin.server.AbstractClientConnector.getConnectorId(AbstractClientConnector.java:417)
    at com.vaadin.server.communication.ConnectorHierarchyWriter.write(ConnectorHierarchyWriter.java:67)
    at com.vaadin.server.communication.UidlWriter.write(UidlWriter.java:143)
    at com.vaadin.server.communication.UidlRequestHandler.writeUidl(UidlRequestHandler.java:149)
    at com.vaadin.server.communication.UidlRequestHandler.synchronizedHandleRequest(UidlRequestHandler.java:97)
    at com.vaadin.server.SynchronizedRequestHandler.handleRequest(SynchronizedRequestHandler.java:37)
    at com.vaadin.server.VaadinService.handleRequest(VaadinService.java:1371)
    at com.vaadin.server.VaadinServlet.service(VaadinServlet.java:238)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:848)

当我运行应用程序并按下按钮时。

我该如何解决?
@Theme("mytheme")
@SuppressWarnings("serial")
public class MyVaadinUI extends UI
{
    private TextField userNameTextField;
    private PasswordField passwordTextField;

    @WebServlet(value = "/*", asyncSupported = true)
    @VaadinServletConfiguration(productionMode = false, ui = MyVaadinUI.class, widgetset = "ru.mycompany.vaadin.demo.AppWidgetSet")
    public static class Servlet extends VaadinServlet {
    }

    @Override
    protected void init(VaadinRequest request) {
        final VerticalLayout layout = new VerticalLayout();
        layout.setMargin(true);
        setContent(layout);

        addUserNameTextField(layout);
        addPasswordTextField(layout);

        addButton(layout, request);
    }

    private void addPasswordTextField(Layout aLayout) {
        passwordTextField = new PasswordField("Пароль:");

        aLayout.addComponent(passwordTextField);

    }

    private void addUserNameTextField(final Layout aLayout) {
        userNameTextField = new TextField("Пользователь:");

        aLayout.addComponent(userNameTextField);
    }


    private void addButton(final Layout aParent, final VaadinRequest request) {
        final Button button = new Button("Войти");
        button.addClickListener(new Button.ClickListener() {
            public void buttonClick(Button.ClickEvent event) {
                final boolean credentialsCorrect = checkCredentials();

                if (credentialsCorrect) {
                    goToMainWindow(request);
                } else {
                    [...]
                }
            }
        });
        aParent.addComponent(button);
    }

    private void goToMainWindow(final VaadinRequest aRequest) {

        final MainUI mainUI = new MainUI();
        mainUI.init(aRequest);
        setContent(mainUI);
    }

}

@Theme("mytheme")
@SuppressWarnings("serial")
public class MainUI extends UI {
    @Override
    protected void init(final VaadinRequest vaadinRequest) {
        final HorizontalSplitPanel splitPanel = new HorizontalSplitPanel();

        setContent(splitPanel);

        splitPanel.setSizeFull();
        splitPanel.setSplitPosition(200, Unit.PIXELS);

        final String[] tabLabels = new String[] {
                "Tree item 1",
                "Tree item 2"};

        final Tree tree = new Tree();

        for (int i=0; i < tabLabels.length; i++)
        {
            addTreeItem(tree, tabLabels[i]);
        }

        splitPanel.setFirstComponent(tree);
        splitPanel.setSecondComponent(new Label("Test"));
    }

    private void addTreeItem(final Tree aTree, final String aLabel) {
        aTree.addItem(aLabel);
    }
}

最佳答案

在 Vaadin 论坛上有人建议使用 navigator ,这解决了我的问题。

关于vaadin - 如何更改 Vaadin 7 应用程序的主视图?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19270675/

相关文章:

vaadin - 如何增加 Vaadin 通知/警告时间?

java - 无法使用 REGEX 解析 Java 中带点的字符串

java - 哪个范围与 vaadin 和 spring 一起使用?

maven - vaadin-maven-archetype - 为什么它会生成三个模块?

瓦丁网格 : Show all rows

java - Vaadin 7.1.0 推送

java - 使用 OpenID 对 Vaadin 应用程序进行身份验证 - 处理重定向困难

javascript - 在 AbstractJavaScriptExtension 类中调用 JavaScript 函数

css - 基本页眉 - 中心 - 页脚布局 Vaadin

java - 客户端 => 服务器与 Vaadin + GWT 通信