我正在定制GWT 2.5.1的DateBox。
我的要求是:我不能允许日期超过99年12月31日,我需要解析日期严格,总是(也就是说,我只需要格式DD / MM / YYYY允许日期,这是使用的格式通过我的MyDatePickerFormat格式),我需要检索解析错误并将错误传播到编辑器框架(并将其显示在我自定义Widget的某处,实现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);
}
Instanciates 1 MyDateBox对象。 采用ParseEventHandler来传播解析问题 覆盖com.google.gwt.user.datepicker.client.DateBox.Format.parse(DateBox, String,boolean)总是调用 com.google.gwt.i18n.shared.DateTimeFormat.parseStrict(String),并限制 解析日期至多于1999年1月1日。
在解析方法结束时,它实例化一个ParseEvent并调用&#34; parent&#34; 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);
}
我的问题如下:
- 事件处理对我来说似乎非常笨拙(事件是实例化的 并使用一个处理程序处理,然后处理此事件 封闭Widget级别(让我们调用那个小部件&#34; w&#34;) 通过使用其“addParseHandler”添加到w的处理程序。 方法。最终的处理程序调用我的实例方法 MyDateBoxEditorDecorator实例。这些是很多步骤,我想必须有更好的方法来处理这个问题? (我过度复杂了吗?)
- MyDateBoxEditorDecorator错误处理 与我的编辑器层次结构不完全集成。当发生什么时,会发生什么 user修改日期字段内容(重复...),多次解析 事件最终发布。我的MyDateBoxEditorDecorator实例 (让我们称之为&#34; myDateBoxEditor&#34;)最终调用它的代表#s recordError()多次。然后,当我最终调用flush()时 刷新我的整个编辑器层次结构myDateBoxEditor&#39; s showError(List errors)方法得到的错误太多了 输入(自上次调用flush()以来的所有错误,我认为)。我能做什么 要避免这种情况吗? (会使用我的附加驱动程序 MyDateBoxEditorDecorator实例并刷新它 - 每次解析都是 完成 - 是解决该问题的正确方法吗?)
谢谢。
PS。我不太了解SO格式,做得最好(它看起来很难看,但足够可读)。
答案 0 :(得分:0)
只是一个单挑:我已经解决了最大的问题(我的编辑器层次结构问题与错误处理有关)。原因是我曾经在一个编辑周期中多次调用getValue()(例如,每次用户修改字段时),这就是导致重复错误显示的原因 - 根据Valueboxeditordecorator源,一个是不应该这样做。 至于其他问题,我希望有优雅的解决方案,但我认为这样做。