Andreyが指摘したブラウザイベントで、この問題の回避策を作成することができました。次のコードがありました。
public void onBrowserEvent(Context context, Element parent, C value,
NativeEvent event, ValueUpdater<C> valueUpdater) {
if (value == null) return;
String eventType = event.getType();
GWT.log(eventType);
super.onBrowserEvent(context, parent, value, event, valueUpdater);
InputElement input = getInputElement(parent);
if ("change".equals(eventType)) {
((HeaderFilterDto) value).setFilterValue(input.getValue());
if (valueUpdater != null) valueUpdater.update(value);
} else if ("keyup".equals(eventType) && event.getKeyCode() == 32) {
insertSpaceToCursorPosition(input);
}
};
そして、カーソル位置にスペースを挿入する次のメソッドがあります。
protected void insertSpaceToCursorPosition(InputElement input) {
if (StringUtils.isNotBlank(input.getValue())) {
int length = input.getValue().length();
int pos = getCursorPos(input);
int selected = getSelectionLength(input);
String sub1 = input.getValue().substring(0, pos);
String sub2 = input.getValue().substring(selected == 0 ? pos: pos + selected, length);
input.setValue(sub1 + SPACE + sub2);
setSelectionRange(input, pos);
} else {
input.setValue(SPACE);
setSelectionRange(input, 0);
}
}
insertSpaceToCursorPosition内のメソッドは、TextBoxImpl.classのValueBoxBase実装からパターン化されました。