我在更改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}}
有没有另外一种方法可以做到这一点?
答案 0 :(得分:5)
考虑到您的要求,我认为您也可以通过实施addBlurHandler()
而不是addValueChangeHandler()
来实现这一目标。
模糊事件会被触发。有关模糊事件的更多信息,请阅读this。
有关GWT BlurEvent
的信息,请阅读this。
答案 1 :(得分:2)
首先,添加普通的ValueChangeHandler(即使它在那里)会导致用户每次输入1个单个字符时都会发送数据库请求,如果你问我这会产生大量开销
每次焦点丢失时保存备份可能会更好,但是有一种情况是使用时没有点击开箱即可以某种方式关闭标签,这是不愉快的。
我的建议是:
Subclass RichTextArea:
公共类MyRichTextArea扩展RichTextArea实现HasValueChangeHandlers {
@Override
public HandlerRegistration addValueChangeHandler(ValueChangeHandler<String> handler) {
return this.addHandler(handler, ValueChangeEvent.getType());
}
}
在子类内创建一个计时器字段。
在RichTextBox的构造函数中添加keyDown事件处理程序:
如果计时器正在运行 - 再延长3秒,否则启动计时器。
当没有进一步的keydowns完成3秒计时器时 - 触发服务调用以保存文本。这就是我做到的方式