2017-04-06 2 views
0

Vaadin을 사용하여 콤보 상자의 값을 확인하려고합니다. 내 목표는 선택한 개체의 'myIntegerAttribute'필드가 null로 설정된 상태로 양식을 커밋하지 않는 것입니다. 콤보 박스가 'MyBean'클래스 객체를 저장한다는 것을 알았습니다.Vaadin 콤보 박스 확인

"FilterableListContainer"를 사용하여 데이터를 바인딩하고 있습니다. 이 시도하지만 발리 해고되지 않는 것 같습니다 :

List<MyBean> myBeans = getMyBeansList(); 
FilterableListContainer filteredMyBeansContainer = new FilterableListContainer<MyBean>(myBeans); 
comboBox.setContainerDataSource(filteredMyBeansContainer); 
comboBox.setItemCaptionPropertyId("caption"); 
... 
comboBox.addValidator(getMyBeanValidator("myIntegerAttribute")); 
... 
private BeanValidator getMyBeanValidator(String id){ 
    BeanValidator validator = new BeanValidator(MyBean.class, id);//TrafoEntity 
    return validator; 
} 

class MyBean { 
    String caption; 
    Integer myIntegerAttribute; 
    ... 
} 

내가 콤보 상자에 null 값을 선택하지 않도록하고 싶지 않아요.

null 값을 커밋하지 않으려면 어떻게해야합니까? BeanValidator을 사용하여, 사용자의 선택에 해당하는 객체의 멤버가 null의 경우

NullValidator nv = new NullValidator("Cannot be null", false); 
    comboBox.addValidator(nv); 

유효성 검사 실패 :

+0

양식에 바인더를 사용하거나 수동으로 레이아웃에 구성 요소를 추가하고 있습니까? "커밋"부분을 포함한 전체 코드를 표시하면 시나리오 이해에 도움이됩니다. – Morfic

+0

예, 기본 게시물에 세부 정보를 추가했습니다. – Ortzi

답변

0

잘못된 방법으로 유효성 검사기를 구현했습니다. 내가 만약 angel의 '검사기'클래스 구현하는 클래스를 생성 :

public class MyBeanValidator implements Validator { 
    @Override 
    public void validate(Object value) throws InvalidValueException { 
     if (!isValid(value)) { 
      throw new InvalidValueException("Invalid field"); 
     } 
    } 
    private boolean isValid(Object value) { 
     if (value == null || !(value instanceof MyBean) 
       || ((MyBean) value).getMyIntegerAttribute() == null) { 
      return false; 
     } 
     return true; 
    } 
} 

을 그리고 콤보 상자를 사용 :

combobox.addValidator(new MyBeanValidator()); 

이 답변 주셔서 감사합니다!

+0

BeanValidator를 사용하고 싶지 않다면, 확실히 그것을 할 수있는 방법 중 하나입니다. –

1

만약 angel 7에서는 사용자의 선택이 null 인 경우 유효성 검사를 실패 NullValidator을 사용

public class MyBean { 

    String caption; 

    @NotNull 
    int myIntegerAttribute; 

    // etc... 
} 

당신이 Viritin에서 FilterableListContainer를 사용하고 있습니까 : 빈 클래스에 @NotNull JSR-303 주석을 포함 할 것이다? 왜 그것이 validator가 사용되는 것을 막을 지 모르겠습니다 만, 왜 콤보 상자와 함께 사용하는지 설명 할 수 있습니까?

+0

콤보 상자 값이 null이 아니기 때문에 작동하지 않을 수도 있습니다. null 값은 'MyClass'유형 개체의 'myIntegerAttribute'속성이 될 수 있습니다. FilterableListContainer를 사용하여 'myBean'값을 내 양식의 필드에 바인딩합니다 (분명히 콤보 상자와 다른 필드가 더 있음). 그 문제는 당신이 말한 것과 관련이 있다고 생각합니다. – Ortzi

+0

@Ortzi : null bean 멤버를 처리하는 방법을 포함하도록 답변이 업데이트되었습니다. –