“已经注册了一个带有id的连接器!”在vaadin中

时间:2017-03-16 18:55:38

标签: java vaadin

我想解决此帖子中解决的问题: Vaadin "A connector with id xy is already registered"

当我将以下代码添加到MyUI时,我在getLogger() lline中收到错误:“ConnectorTracker类型中的方法getLogger()不可见”

public class SomeUI extends UI {

    private ConnectorTracker tracker;

    @
    Override
    public ConnectorTracker getConnectorTracker() {
        if (this.tracker == null) {
            this.tracker = new ConnectorTracker(this) {

                @
                Override
                public void registerConnector(ClientConnector connector) {
                    try {
                        super.registerConnector(connector);
                    } catch (RuntimeException e) {
                        getLogger().log(Level.SEVERE, "Failed connector: {0}", connector.getClass().getSimpleName());
                        throw e;
                    }
                }

            };
        }

        return tracker;
    }
}

是否可以快速解决此问题或任何其他解决方案如何修复xy连接器异常? 我将spring bootvaadin 7一起使用。

2 个答案:

答案 0 :(得分:0)

getLogger()方法是私有的,您正在实现匿名子类型,该子类型只能访问公共和受保护的方法。您可以轻松地将自己的getLogger添加到UI子类中:

private static Logger getLogger() {
    return Logger.getLogger(SomeUI.class.getName());
}

private ConnectorTracker connectorTracker;

@Override
public ConnectorTracker getConnectorTracker() {
    if (connectorTracker == null) {
        connectorTracker = new ConnectorTracker(this) {
            @Override
            public void registerConnector(ClientConnector connector) {
                try{
                    super.registerConnector(connector);
                } catch (RuntimeException e) {
                    getLogger().log(Level.SEVERE, "OOPS!");
                    throw e;
                }
            }

        };
    }
    return connectorTracker;
}

答案 1 :(得分:0)

要修复连接器xy已经注册的问题,您需要检查是否有任何组件(视图,布局,按钮,面板,等等......)多次添加到视图中。

因此,如果使用new VerticalLayout()创建布局,则无法重复使用它。

这意味着你应该检查你所有的Vaadin组件和你自己的Views / UI-Components,如果它们被使用了两次或者其中一些是静态的。