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