我知道在 Vaadin7 (8) 中有一些方法可以从服务器端获取/设置文本字段的光标位置。
我正在使用 Vaadin Flow v21,但没有这样的方法。如何从服务器端同步获取/设置光标位置?使用一些javascript设置它看起来可以正常工作,但我无法读取实际的光标位置,因为它只是异步的。如何做到同步?
我试着这样读:
public int getSelectionStart() throws InterruptedException
{
Future<Integer> value = UI.getCurrent().getPage().executeJs(
"return $0.shadowRoot.querySelector('[part=\"value\"]').selectionStart;"
, getElement()).toCompletableFuture(Integer.class);
final int[] val = new int[1];
Thread t = new Thread(() ->
{
Integer result = null;
try
{
result = value.get();
}
catch (Exception e)
{
e.printStackTrace();
}
val[0] = result == null ? 0 : result;
});
t.start();
t.join();
return val[0];
};
但是上面的方法给了我一个例外,正在进行的 UI 会话请求还没有关闭,所以基本上它不能执行 javascript,除非我结束请求。
这就是我设置光标位置的方式,这似乎有效,因为我不想返回任何返回值,因此结束请求将执行脚本并设置正确的光标位置。
public void setSelectionStart(int pos)
{
UI.getCurrent().getPage().executeJs("$0.shadowRoot.querySelector('[part=\"value\"]').setSelectionRange($1, $1);", getElement(), pos);
}
感谢您的任何帮助/建议!