GXT GridInlineEditing字段验证



我正在使用GWT/GXT与GWT编辑器框架构建一个编辑器应用程序。在某些情况下,我不得不编辑日期列表。为此,我选择使用GridInlineEditing,它工作得很好,但我也必须在gridInlineEditing中对我的DateField进行一些格式验证。

基本上,编辑的默认行为是当CompleteEditEvent被触发时"记录"变化,而不管验证的结果如何。因此,我试图像这样覆盖onCompleteEditHandler方法(根据GXT论坛,这显然是唯一的方法):

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

它几乎是我想要的,当值无效时,它留在版本中,但是当我在错误的值之后输入一个有效值时,它知道值是有效的,但它不退出版本模式。我也试图做同样的事情保持错误的输入值,而不是清除我的商店和创建一个新的值,它的行为完全相同的方式,除了用这个方法,我也有一个显示问题。

有人知道怎么做吗?我也有同样的问题与String的列表

尝试使用Converter

    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);

在验证字段之前尝试调用Field#clearInvalid(我认为这将在您的示例中的df.validate();行之前完成)。

相关内容

  • 没有找到相关文章

最新更新