我正在创建一个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条件为真,那么我需要将字段中的前一个值放在字段中而不是重置它。请建议如何执行此操作。
答案 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()
也会清除验证消息!
如何在这种情况下使用它?
Field.reset()
重新加载您所在字段中的最后一个工作值。