首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >定制GWT DateBox

定制GWT DateBox
EN

Stack Overflow用户
提问于 2017-01-11 16:25:48
回答 1查看 718关注 0票数 0

我正在定制GWT 2.5.1的DateBox。

我的要求是:我不能允许日期超过31/12/9999,我需要严格的日期解析,始终(也就是说,我只需要允许DD/MM/YYYY格式的日期,这是我的MyDatePickerFormat格式),我需要检索解析错误并将错误传播到编辑器框架(并将其显示在实现HasEditorErrors的自定义Widget的某个地方)。

这是我为此目的创建的类的列表:

代码语言:javascript
复制
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.

代码语言:javascript
复制
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. Instanciates 1 MyDateBox对象。需要一个ParseEventHandler来传播解析问题。 重写com.google.gwt.user.datepicker.client.DateBox.Format.parse(DateBox,字符串(布尔值),使其始终调用com.google.gwt.i18n.shared.DateTimeFormat.parseStrict(String),,最多将解析的日期限制为01/01/9999。 在解析方法的末尾,它实例化一个ParseEvent并调用“父”ParseEventHandler处理程序方法。

3.

代码语言:javascript
复制
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级别(让我们调用这个小部件"w")触发这个事件,这个事件由使用'addParseHandler‘方法添加到w的处理程序处理。最后一个处理程序在我的MyDateBoxEditorDecorator实例上调用一个实例方法。这是很多步骤,我想一定有更好的方法来处理这件事?(我让事情复杂化了?)
  • MyDateBoxEditorDecorator错误处理不能很好地与我的编辑器层次结构集成。所发生的情况是,当用户修改日期字段内容(重复.)时,最终会发出多个解析事件。我的MyDateBoxEditorDecorator实例(让我们称之为"myDateBoxEditor")最终多次调用其委托的recordError()。然后,当我最后调用flush()来刷新整个编辑器层次结构时,myDateBoxEditor的showError(列表错误)方法作为输入获得了太多的错误(我认为,自上次调用刷新()以来所有的错误都是错误)。我该怎么做才能避免这种情况?(对我的MyDateBoxEditorDecorator实例使用额外的驱动程序并将其刷新-every时间解析是否是解决该问题的正确解决方案?)

谢谢。

PS。我不太了解这样的格式,已经尽了我最大的努力(它看起来很难看,但可读性很强)。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-02-20 12:21:15

只是提醒一下:我已经解决了最大的问题(我的编辑器层次结构问题与错误处理)。原因是我在单个编辑器周期中多次调用getValue() (例如,每次用户修改字段时),这就是导致显示重复错误的原因--根据Valueboxeditordecorator源,不应该这样做。至于其他问题,我希望有一个优雅的解决办法,但我认为这样就行了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41595880

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档