不允许GWT addValueChangeHandler到RichTextBox,这是另一种方法

时间:2016-01-12 04:40:40

标签: java gwt

我在更改The method addValueChangeHandler(new ValueChangeHandler<String>(){}) is undefined for the type RichTextArea并退出 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); } } }); 后尝试更新数据库(即,我不想强​​迫用户按下&#34;更新按钮&# 34)。但是,我的代码在第一行抛出异常 01-11 18:07:02.271: E/Volley(29037): [15630] NetworkDispatcher.run:Unhandled exception java.lang.RuntimeException: Bad URL null 01-11 18:07:02.271: E/Volley(29037): java.lang.RuntimeException: Bad URL null 01-11 18:07:02.271: E/Volley(29037):at com.android.volley.toolbox.BasicNetwork.performRequest(BasicNetwork.java:127) 01-11 18:07:02.271: E/Volley(29037):at com.android.volley.NetworkDispatcher.run(NetworkDispatcher.java:110) 01-11 18:07:02.271: E/Volley(29037): Caused by: java.net.MalformedURLException: Protocol not found: null 01-11 18:07:02.271: E/Volley(29037):at java.net.URL.<init>(URL.java:176) 01-11 18:07:02.271: E/Volley(29037):at java.net.URL.<init>(URL.java:125) 01-11 18:07:02.271: E/Volley(29037):at com.android.volley.toolbox.HurlStack.performRequest(HurlStack.java:101) 01-11 18:07:02.271: E/Volley(29037):at com.android.volley.toolbox.BasicNetwork.performRequest(BasicNetwork.java:93) 01-11 18:07:02.271: E/Volley(29037):... 1 more

{{1}}

有没有另外一种方法可以做到这一点?

2 个答案:

答案 0 :(得分:5)

考虑到您的要求,我认为您也可以通过实施addBlurHandler()而不是addValueChangeHandler()来实现这一目标。

当组件失去焦点时,

模糊事件会被触发。有关模糊事件的更多信息,请阅读this

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

答案 1 :(得分:2)

首先,添加普通的ValueChangeHandler(即使它在那里)会导致用户每次输入1个单个字符时都会发送数据库请求,如果你问我这会产生大量开销

每次焦点丢失时保存备份可能会更好,但是有一种情况是使用时没有点击开箱即可以某种方式关闭标签,这是不愉快的。

我的建议是:

  1. Subclass RichTextArea:

    公共类MyRichTextArea扩展RichTextArea实现HasValueChangeHandlers {

        @Override
        public HandlerRegistration addValueChangeHandler(ValueChangeHandler<String> handler) {
            return this.addHandler(handler, ValueChangeEvent.getType());
        }
    
    }
    
  2. 在子类内创建一个计时器字段。

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

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

    当没有进一步的keydowns完成3秒计时器时 - 触发服务调用以保存文本。这就是我做到的方式

相关问题