我有一个Vaadin-TabSheet,在每个标签中都有一个BrowserFrame。我注意到以下不良行为:单击更改标签时,浏览器框架会重新加载,可能会擦除用户可能在该标签中所做的任何输入。

如何避免重新加载标签页? tabSheet是否可以替代?

最佳答案

现在,我已经建立了自己的TabSheet。
我尝试在选项卡内容上使用setVisible,但这也使浏览器框架重新加载。所以我想出了以下代码来更改内容的大小:

private final HorizontalLayout buttons;
private final GridLayout contents;

/**
 * Construct a new MyTabSheet
 */
public MyTabSheet() {
    buttons = new HorizontalLayout();
    contents = new GridLayout();
....

        if(t.isSelected()) {
            selectedComponent = t.getComponent();
        } else {
            t.getComponent().setSizeUndefined();
            t.getComponent().setWidth(0.0f, Unit.PIXELS);
            t.getComponent().setHeight(0.0f, Unit.PIXELS);
        }
    }

    if(null != selectedComponent) {
        String frameHeight;
        if(selectedComponent instanceof BrowserFrame) {
            BrowserFrame bf = (BrowserFrame)selectedComponent;
            frameHeight = (String) bf.getData();
        } else {
            frameHeight = "800px";
        }
        selectedComponent.setSizeFull();
        selectedComponent.setHeight(frameHeight);
    }

10-08 17:42