如果GXT中的某些条件失败,如何将DateField值设置为Previous Value

时间:2014-03-26 11:40:40

标签: java gwt gxt

我正在创建一个DateField并向其添加监听器。如果某些条件失败,我需要使用该字段中的先前值重置DateField的值。这是我的代码

final DateField dateField1 = new DateField();
    dateField1.getPropertyEditor().setFormat(DateTimeFormat.getFormat("dd/MMM/yyyy")); 
    dateField1.getDatePicker().addListener(Events.Select, new Listener<DatePickerEvent>() {

        @Override
        public void handleEvent(DatePickerEvent dpe) {

        //  Window.alert("Getting Roster Date here-->"+grid.getColumnModel().);
        Window.alert("Getting RosterDate-->"+   caseStoreModule.getModifiedRecords().get(0).get("rosterDate"));
         if(caseStoreModule.getModifiedRecords().get(0).get("rosterDate")!=null){
                DateTimeFormat format = DateTimeFormat.getFormat("dd/MMM/yyyy");
                rosterdate=format.parse(caseStoreModule.getModifiedRecords().get(0).get("rosterDate").toString());
                nextdate.setTime(rosterdate.getTime()+(1000*60*60*24));
                prevdate.setTime(rosterdate.getTime()-(1000*60*60*24));
            }
        checkInDate=(Date)(dateField1.getValue());
        if(checkInDate.getTime()<rosterdate.getTime() || checkInDate.getTime()>nextdate.getTime()){
            MsgBox.info("Enter valid Check In Date");
           dateField1.setValue();//here i need to reset the value to the     previous value.
            return ;
        }



        }
    });

如果if条件为真,那么我需要将字段中的前一个值放在字段中而不是重置它。请建议如何执行此操作。

3 个答案:

答案 0 :(得分:0)

一种解决方案是使用String变量在执行任何操作之前保存字段值。因此,如果您需要重置字段,请使用它。像这样的东西

String tmpStringValue = dateField1.getValue();
...
if(something went wrong){
   dateField1.setValue(tmpStringValue );
}

答案 1 :(得分:0)

您可以将值存储为Element的属性。

首次此属性oldValue将为空。 如果验证成功,则每次都设置此属性。

有关详细信息,请阅读内联评论。

以下是示例代码:

dateField1.getCell().getDatePicker().addValueChangeHandler(new ValueChangeHandler<Date>() {

    @Override
    public void onValueChange(ValueChangeEvent<Date> event) {

        DateTimeFormat format = DateTimeFormat.getFormat("yyyy-dd-MM");
        String oldValue = dateField1.getElement().getAttribute("oldValue");

        if (oldValue == null || oldValue.length() == 0) {
            // initially date field is empty
            dateField1.getElement().setAttribute("oldValue",
                    format.format(event.getValue()));
        } else {
            Date oldDate = format.parse(oldValue);
            Date newDate = event.getValue();

            // you validation logic
            if (oldDate.getTime() < newDate.getTime()) {
                // revert back to last value if validation is failed
                dateField1.getCell().getDatePicker().setValue(oldDate);
            } else {
                // set the old value with new one 
                dateField1.getElement().setAttribute("oldValue",
                        format.format(event.getValue()));
            }
        }

    }
});

如果在设置值后最初使用默认值填充值,则调用以下行。

dateField1.getElement().setAttribute("oldValue",
                    format.format(event.getValue()));

答案 2 :(得分:0)

在GXT中,每个Field都有一个setOriginalValue(D originalValue)方法,可以帮助您解决这个问题。您始终可以通过reset()字段返回原始值。 请注意,reset()也会清除验证消息!

如何在这种情况下使用它?

  1. 当输入的值经过验证时设置原始值
  2. 如果出现任何问题,请致电Field.reset()重新加载您所在字段中的最后一个工作值。