【问题标题】:Customizing GWT DateBox自定义 GWT 日期框
【发布时间】: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. 实例化 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


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-07
      • 1970-01-01
      • 2011-10-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多