NativeSelect等到我选择一个选项

时间:2017-03-09 12:49:07

标签: java if-statement select vaadin

我使用名为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条件。你有什么想法吗?

1 个答案:

答案 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);
            }
        }
    }
);

你应该做的其他事情:

  • 避免对文字使用String构造函数:behaviourData.add("end-dx6");
  • 检查值时检查是否为空,用户可能只删除所选文字:

    //before checking the value
    if(behaviour1.getValue()==null) {
        //nothing is selected, just return
        return;
    }