自定义GWT DateBox

时间:2017-01-11 16:25:48

标签: java gwt event-handling gwt2

我正在定制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);
}
  1.   

    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处理程序方法。

  2. 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格式,做得最好(它看起来很难看,但足够可读)。

1 个答案:

答案 0 :(得分:0)

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

相关问题