【发布时间】:2017-02-20 20:21:15
【问题描述】:
我正在定制 GWT 2.5.1 的 DateBox。
我的要求是:我不能允许超过 31/12/9999 的日期,我需要严格的日期解析,总是(也就是说,我需要只允许格式为 DD/MM/YYYY 的日期,这是使用的格式通过我的 MyDatePickerFormat 格式),我需要检索解析错误并将错误传播到编辑器框架(并将其显示在我的自定义小部件的某处,它实现了 HasEditorErrors)。
这是我为此目的创建的类的列表:
1. MyDateBox extends DateBox implements ParseEvent.HasParseEventHandlers.
2. MyDatePickerFormat implements Format
3. MyDateBoxEditorDecorator extends Composite implements HasEditorErrors<Date>, HasEnabled, HasValue<Date>,
IsEditor<LeafValueEditor<Date>>, HasEditorDelegate<Date>
详细说明:
1.
public MyDateBox()
{
super();
this.getTextBox().setMaxLength(MyDateBox.MyDatePickerFormat.MAX_DATE_LENGTH);
final MyDatePickerFormat myPickerFormat = new MyDateBox.MyDatePickerFormat();
setFormat(myPickerFormat);
ParseEventHandler handler = new ParseEventHandler()
{
@Override
public void onParseEvent(ParseEvent event)
{
MyDateBox.this.fireEvent(event);
}
};
myPickerFormat.setParseEventHandler(handler);
}
实例化 1 个 MyDateBox 对象。 采用 ParseEventHandler 传播解析问题。
覆盖 com.google.gwt.user.datepicker.client.DateBox.Format.parse(DateBox, 字符串,布尔值)总是调用 com.google.gwt.i18n.shared.DateTimeFormat.parseStrict(String),并将 最多将日期解析为 01/01/9999。
在 parse 方法结束时,它实例化一个 ParseEvent 并调用“父”ParseEventHandler 处理程序方法。
3.
public MyDateBoxEditorDecorator()
{
dateBox = new MyDateBox();
dateBox.addParseErrorHandler(new ParseEventHandler()
{
@Override
public void onParseEvent(ParseEvent event)
{
MyDateBoxEditorDecorator.this.onParseEvent(event);
}
});
initWidget(Binder.BINDER.createAndBindUi(this));
contents.add(dateBox);
}
我的问题如下:
- 事件处理对我来说似乎很笨拙(事件被实例化 并使用一个处理程序进行处理,然后在 处理的封闭小部件级别(让我们称该小部件“w”) 通过使用其“addParseHandler”添加到 w 的处理程序 方法。最终处理程序调用我的实例方法 MyDateBoxEditorDecorator 实例。这些步骤很多,我想必须有更好的方法来处理这个? (我把它复杂化了?)
- MyDateBoxEditorDecorator 错误处理确实 不能很好地与我的编辑器层次结构集成。发生的事情是,当 用户修改日期字段内容(反复...),多次解析 事件最终发出。我的 MyDateBoxEditorDecorator 实例 (让我们称之为“myDateBoxEditor”)最终调用它的委托 recordError() 多次。然后,当我最终调用 flush() 到 刷新我的整个编辑器层次结构,myDateBoxEditor showError(List errors) 方法得到太多错误,因为 输入(我认为自上次调用flush()以来的所有错误)。我能做什么 怎么做才能避免呢? (会用我的附加驱动程序 MyDateBoxEditorDecorator 实例并刷新它 - 每次解析都是 完成 - 是该问题的正确解决方案吗?)
谢谢。
附言。我对 SO 格式不太了解,已经尽力了(它看起来很丑但可读性足够)。
【问题讨论】:
标签: java gwt event-handling gwt2