2014-07-23 5 views
0

gwt 편집기 프레임 워크가있는 GWT/GXT를 사용하여 편집기 응용 프로그램을 작성 중입니다. 어떤 경우에는 날짜 목록을 편집해야합니다. 이렇게하려면 GridInlineEditing을 사용하기로 선택했으나 제대로 작동하지만 gridInlineEditing 내 DateField에서 일부 형식 유효성 검사를 수행해야합니다.GXT GridInlineEditing 필드 유효성 검사

기본적으로 유효성 검사 결과에 관계없이 CompleteEditEvent이 실행되면 편집의 기본 동작은 "기록"됩니다. 값이 유효하고 모든 것을하지 않을 때

public class NameValueDTMEditorWidget extends GenericEditableListView<DTM, Date> implements Editor<NameValueDTM> { 
private final static DTMProperties props = GWT.create(DTMProperties.class); 

ListStoreEditor<DTM> values; 
@Ignore 
private DateField df = new DateField(); 

public NameValueDTMEditorWidget(String widgetTitle) { 
    super(widgetTitle, new ListStore<DTM>(props.key()), props.dtm()); 

    DateTimeFormat dtf = DateTimeFormat.getFormat("yyyyMMddHHmmss"); 

    df.setPropertyEditor(new DateTimePropertyEditor(dtf)); 

    addEditorConfig(df); // parent class method basically doing: editing.addEditor(df), editing is GridInlineEditing 

    // Modifying grid cell render for a Date 
    Cell c = new DateCell(DateTimeFormat.getFormat("yyyy-MM-dd HH:mm:ss")); 
    getColumnModel().getColumn(0).setCell(c); 

    values = new ListStoreEditor<DTM>(getStore()); 

    editing.addCompleteEditHandler(new CompleteEditEvent.CompleteEditHandler<DTM>() { 
     @Override 
     public void onCompleteEdit(CompleteEditEvent<DTM> event) { 
      df.validate(); // I force field validation 
      if (df.getValue() == null || !df.isValid()) { // if value's not valid 
       getStore().clear(); // clear the store 
       DTM e = GWT.create(DTM.class); 
       getStore().add(e); // add a new value 
       editing.startEditing(event.getEditCell()); // start editing new value 
       df.forceInvalid(); // force invalid to get invilid display on the field 
      } 
     } 
    }); 
} 

그것은 거의 내가 원하는,이 판에 남아 않습니다 그래서 저는 (분명히 그것을 according to GXT forum을 할 수있는 유일한 방법입니다)이 같은 onCompleteEditHandler 메소드를 오버라이드 (override) 시도 ,하지만 잘못된 값 뒤에 올바른 값을 입력하면 값이 유효하다는 것을 알지만 에디션 모드를 종료하지는 않습니다. 또한 상점을 지우고 새 값을 만드는 대신 잘못된 입력 값을 유지하는 것을 시도해 보았습니다.이 메서드를 사용하면 표시 문제가 있다는 점만 제외하면 정확히 같은 방식으로 동작합니다.

아무에게도이를 수행하는 방법을 알고 있습니까? 또한 String과 같은 문제가 있습니다.

답변

0

필드 유효성을 검사하기 전에 Field#clearInvalid으로 전화 해보십시오 (예 : df.validate(); 예 앞에 행해짐).

+0

난 여전히 똑같은 동작을합니다. 문제는 필드 또는 필드 유효성 검사 자체보다 GridInlineEditing에 더 관련이 있다고 생각합니다. – RadASM

2

에 한번 사용 변환기

editing.addEditor(columnConfig, new Converter<String, Date>() { 

     @Override 
     public String convertFieldValue(Date date) { /* called when you leave the cell */ 
      GridCell cell = (GridCell) editing.getActiveCell(); 
      ListStore<DTM> store = grid.getStore(); 
      DTM dtm = store.get(cell.getRow()); 

      /* 
      * here you have the dtm object belongs to related cell and the date as input. 
      * done with your validation here. 
      */ 

      return dtf.format(date); 
     } 

     @Override 
     public Date convertModelValue(String date) { /* called when you focus in the cell */ 
      return dtf.parse(date); 
     } 

    }, df); 
+0

지금 다른 프로젝트로 전환했지만이 작업으로 돌아 가면 작동하는지 알려 드리겠습니다. – RadASM