Vaadin表如何与Navigator一起工作?

Vaadin表如何与Navigator一起工作?,vaadin,vaadin7,Vaadin,Vaadin7,我正在编写一个视图,当选择右侧的表条目时,该视图将导航到左侧显示的表条目页面。这类似于Vaadin网站上的addressbook教程,只是我使用了导航器和视图 当我让导航开始工作时,单击id为12的条目将导航到localhost:8080/test/12,并且视图enter中的测试标签将更改为与id匹配,testTable.getItemevent.getParameters由于某种原因返回null,因此我无法访问该条目 视图的ValueChangeListener和enter如下所示

我正在编写一个视图,当选择右侧的表条目时,该视图将导航到左侧显示的表条目页面。这类似于Vaadin网站上的addressbook教程,只是我使用了导航器和视图

当我让导航开始工作时,单击id为12的条目将导航到localhost:8080/test/12,并且视图enter中的测试标签将更改为与id匹配,testTable.getItemevent.getParameters由于某种原因返回null,因此我无法访问该条目

视图的ValueChangeListener和enter如下所示

    class ValueChangeListener implements Property.ValueChangeListener {
        Object testId;

        @Override
        public void valueChange(ValueChangeEvent event) {
            // Navigate to a chosen table entry
            this.testId = event.getProperty().getValue();
            navigator.navigateTo("test/" + testId);
        }
    }

    ...

    public void enter(ViewChangeEvent event) {
        Object tmp = event.getParameters();
        testName.setValue((String) tmp);    // is set to the id
        System.out.println(testTable.getItem(tmp) == null);    // DEBUG: always returns true
    }

我认为你应该改变这一点:

System.out.println(testTable.getItem(tmp) == null);
为此:

String str = (String) tmp;
if (str != null && !str.isEmpty()) {
    System.out.println(testTable.getItem(Integer.parseInt(str)) == null);
}

我认为你管理自己导航器的方式有问题。 首先,当您使用Navigator更改视图时,您应该使用添加适当的URL片段。 例如,Vaadin采样器使用:


如果URL中没有ViewChangeEvent.getParameters,则返回null或isEmpty。

如何创建testTable?你用什么类型的容器?@Krayo我用IndexedContainer做桌子。createTestTable向ic添加容器属性,并使用for循环填充它,该循环使用ic.addItem将对象添加到表中,并在返回ic之前使用setValue设置该对象的值。表的创建类似于。我尝试过,但是Eclipse给了我错误` java.lang.NumberFormatException:For input string:'。测试表没有那么大,parseLong给出了相同的错误,所以它也不能是id超过最高整数的情况。@MarkusM。我编辑了我的答案。当第一次显示异常时?根据Eclipse,isEmpty不是为对象定义的,它唯一的建议是将tmp转换为AbstractField。您的代码工作正常,现在我可以按原样显示条目信息了。谢谢