2017-03-09 1 views
0

Vaadin이라는 프레임 워크를 사용하고 있습니다. NativeSelect를 사용하며 HTML 선택과 유사합니다. 그리고 하나의 옵션이 선택 될 때 setVisible (true)를 원한다. 여기 옵션을 선택할 때까지 NativeSelect가 대기합니다.

내 코드입니다 :

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 비어 있기 때문에, 내가 값을 변경할 때 내가 시도/캐치에 의해서가 아니라 후 항복하려고 이해 오류가 선택의 내 if 조건에 입력하지 않습니다. 너는 어떤 생각을 가지고 있니?

+0

'if' 문이 ValueChangeListener에 있다고 가정합니다. 그렇지 않으면, 결코 실행되지 않고 아마도 실패 할 것입니다. –

+0

If if 문을 ValueChangeListener에 넣을 때 작동하지 않습니다. –

+0

작동합니다. 내 잘못해서 죄송합니다. { –

답변

0

초기화 중에 테스트가 무의미합니다 (이 경우 명시 적으로 setValue을 호출하지 않는 한 현재 null이기 때문에 무의미합니다).

값을 선택했을 때 코드를 실행하려면이 코드를 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); 
      } 
     } 
    } 
); 

다른 일을 당신은 아마 수행해야합니다 리터럴

  • 피하기 사용하여 문자열 생성자 : 널 (null)에 대한 behaviourData.add("end-dx6");
  • 확인 값을 검사 할 때 그것이 가능 해당 사용자는 선택한 텍스트 만 삭제합니다.

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