我使用名为Vaadin的框架,其中我使用的是NativeSelect,其工作方式与HTML选择相同。我想在选择一个选项时setVisible(true)。
这是我的代码:
List<String> behaviourData = new ArrayList<>();
behaviourData.add(new String("end"));
behaviourData.add(new String("end-dx6"));
NativeSelect behaviour1 = new NativeSelect("Select", behaviourData);
behaviour1.addValueChangeListener(event -> Notification.show("Value changed:", String.valueOf(behaviour1.getValue()), Notification.Type.TRAY_NOTIFICATION));
if (behaviour1.getValue().equals("end-dx6")) {
System.out.print("else if");
hop1.setVisible(true);
out1.setVisible(true);
nextHop.setVisible(true);
outGoing.setVisible(true);
}
但是当我启动我的页面时,我有一个错误,因为behaviour1是空的,我知道我尝试通过try / catch投降但是之后,当我更改select的值时它不会进入我的if条件。你有什么想法吗?
答案 0 :(得分:0)
在初始化期间测试behaviour1.getValue()
是没有意义的,因为此时它是空的(除非你明确地调用setValue
)。
如果要在选择值时运行代码,则应在ValueChangeListener中添加此代码。
这样的事情应该有效:
behaviour1.addValueChangeListener(
new ValueChangeListener() {
@Override
public void valueChange(Property.ValueChangeEvent event){
Notification.show("Value changed:", String.valueOf(behaviour1.getValue()), Notification.Type.TRAY_NOTIFICATION);
if (behaviour1.getValue().equals("end-dx6")) {
System.out.print("else if");
hop1.setVisible(true);
out1.setVisible(true);
nextHop.setVisible(true);
outGoing.setVisible(true);
}
}
}
);
你应该做的其他事情:
behaviourData.add("end-dx6");
检查值时检查是否为空,用户可能只删除所选文字:
//before checking the value
if(behaviour1.getValue()==null) {
//nothing is selected, just return
return;
}