Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/gwt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 不允许将GWT addValueChangeHandler添加到RichTextBox,需要另一种方法_Java_Gwt - Fatal编程技术网

Java 不允许将GWT addValueChangeHandler添加到RichTextBox,需要另一种方法

Java 不允许将GWT addValueChangeHandler添加到RichTextBox,需要另一种方法,java,gwt,Java,Gwt,一旦我更改了RichTextBox并退出了RichTextBox(即,我不想强制用户按下“更新按钮”),我将尝试更新数据库。但是,我的代码抛出异常第一行的类型RichTextArea的addValueChangeHandler(new ValueChangeHandler(){})方法未定义 textBoxExistingDescription.addValueChangeHandler(new ValueChangeHandler<

一旦我更改了
RichTextBox
并退出了
RichTextBox
(即,我不想强制用户按下“更新按钮”),我将尝试更新数据库。但是,我的代码抛出异常
第一行的类型RichTextArea
的addValueChangeHandler(new ValueChangeHandler(){})方法未定义

                             textBoxExistingDescription.addValueChangeHandler(new ValueChangeHandler<String>() {
                                public void onValueChange(ValueChangeEvent<String> event) {

                                    //If a record for this Youth Member specific detail line exists then update it else add it.
                                    if (ymAwardDetails.getYmsdId() != null) {
                                        AsyncCallback<Void> callback = new YMSpecificHandler<Void>(ScoutAwardView.this);
                                        rpc.updateYMSpecific(ymAwardDetails.getYmsdId(), ymAwardDetails.getYmsdDetail(), callback);
                                    }else{
                                        AsyncCallback<Void> callback = new YMSpecificHandler<Void>(ScoutAwardView.this);
                                        rpc.addYMSpecific(youthMemberID, ymAwardDetails.getAdId(), ymAwardDetails.getYmsdDetail(), callback);
                                    }
                                }
                            });
textBoxExistingDescription.addValueChangeHandler(新的ValueChangeHandler()){
ValueChange上的公共作废(ValueChangeEvent事件){
//如果存在此青年成员特定详细信息行的记录,则更新该记录,否则添加该记录。
if(ymAwardDetails.getYmsdId()!=null){
AsyncCallback callback=新的YMSpecificHandler(ScoutAwardView.this);
updateYMSpecific(ymAwardDetails.getYmsdId(),ymAwardDetails.getYmsdDetail(),回调);
}否则{
AsyncCallback callback=新的YMSpecificHandler(ScoutAwardView.this);
addYMSpecific(youthMemberID,ymAwardDetails.getAdId(),ymAwardDetails.getYmsdDetail(),回调);
}
}
});

请问有没有其他方法可以做到这一点?

看看您的需求,我认为您也可以通过实现
addBlurHandler()
而不是
addValueChangeHandler()
来实现同样的目标

模糊事件在组件失去焦点时触发。有关模糊事件的更多信息,请阅读


有关GWT
BlurEvent
的信息,请阅读。

首先,添加普通的ValueChangeHandler(即使它存在)将导致用户每次键入1个字符时发送数据库请求,如果您问我,这会造成大量开销

每次焦点丢失时保存备份可能会更好,但在某些情况下,使用过的备份并没有单击开箱即用,而是以某种方式关闭了选项卡,这是不愉快的

我的建议是:

  • 子类RichTextArea:

    公共类MyRichTextArea扩展了RichTextArea,实现了HasValueChangeHandlers{

        @Override
        public HandlerRegistration addValueChangeHandler(ValueChangeHandler<String> handler) {
            return this.addHandler(handler, ValueChangeEvent.getType());
        }
    
    }
    
    @覆盖
    公共句柄注册addValueChangeHandler(ValueChangeHandler){
    返回此.addHandler(handler,ValueChangeEvent.getType());
    }
    }
    
  • 在子类内部创建一个计时器字段

  • 在RichTextBox的构造函数中,添加keyDown事件处理程序:

  • 如果计时器正在运行-再延长3秒,否则启动计时器


    当3秒计时器结束而没有进一步按键时-触发服务调用以保存文本。我就是这样做的

    我已经从@RAS(感谢RAS)实现了解决方案,经过大量测试,这在没有计时器的情况下对我有效。谢谢你,波玛。