oracle-adf - 如何使用 autoSuggestBehavior 使用鼠标进行复制和粘贴
问题描述
我正在实现一个正在使用的功能,autoSuggestBehavior
当用户使用键盘输入或使用 Ctrl C、Ctrl V 输入时它工作正常
但是当用户使用鼠标复制和粘贴时它不起作用。
当前代码是
<af:inputText id="it1" placeholder="#{viewcontrollerBundle['employees.QuickSearch.tooltip']}" autoSubmit="true"
valueChangeListener="#{pageFlowScope.employeeQuickSearchBean.onChangeSearchCriteria}"
binding="#{requestScope.quickSearchInputText}" styleClass="QuickSearchTextBox" maximumLength="100">
<af:autoSuggestBehavior suggestItems="#{pageFlowScope.employeeQuickSearchBean.getSuggestItems}"/>
<af:clientListener method="onQuickSearchFocus" type="focus"/>
<af:clientListener method="onQuickSearchBlur" type="blur"/>
<af:clientListener method="onQuickSearchValueChange" type="valueChange"/>
</af:inputText>
试试No.1
我试图创建<af:clientListener>
触发<af:serverListener>
<af:inputText id="it1" placeholder="#{viewcontrollerBundle['employees.QuickSearch.tooltip']}" autoSubmit="true"
valueChangeListener="#{pageFlowScope.employeeQuickSearchBean.onChangeSearchCriteria}"
binding="#{requestScope.quickSearchInputText}" styleClass="QuickSearchTextBox" maximumLength="100">
<af:autoSuggestBehavior suggestItems="#{pageFlowScope.employeeQuickSearchBean.getSuggestItems}"/>
<af:clientListener method="invokeQuickSearchAutoSuggestion" type="mouseDown"/>
<af:serverListener type="invokeQuickSearchAutoSuggestionFromBean" method="#{pageFlowScope.employeeQuickSearchBean.getSuggestItems}"/>
<af:clientListener method="onQuickSearchFocus" type="focus"/>
<af:clientListener method="onQuickSearchBlur" type="blur"/>
<af:clientListener method="onQuickSearchValueChange" type="valueChange"/>
</af:inputText>
在javascript中,我定义这样的方法
function invokeQuickSearchAutoSuggestion(event){
console.log('call here');
var inputTextComponent = event.getSource();
AdfCustomEvent.queue(inputTextComponent, "invokeQuickSearchAutoSuggestionFromBean",{fvalue:component.getSubmittedValue()}, false);
event.cancel();
}
在那里,我只是添加了一个要打印的日志,以检查我们是否可以获得右键单击、复制和粘贴事件,但它不起作用。
试试2号
我添加了一个日志valueChangeListener="#{pageFlowScope.employeeQuickSearchBean.onChangeSearchCriteria}"
,它也没有得到那个事件。
我发现原因可能是当我右键单击并选择粘贴选项时,鼠标已经超出了输入组件,这使得这些代码不起作用。
有人可以给我一个解决方案吗?
解决方案
我从我的一个朋友那里得到了答案,它运作良好,我想分享。
基本上,ADF 不支持这一点,我们需要覆盖_fireMouseIn
if (this.constructor._typeName == "AdfAutoSuggestBehavior") {
this._fireMouseIn = function (componentEvent) {
var component = componentEvent.getSource();
if (component && component instanceof AdfUIEditableValue) {
var target = componentEvent.getNativeEventTarget();
var value = target.getAttribute(AdfAutoSuggestBehavior._ITEM_VALUE_ATTR);
if (value && value.length > 0) {
var allItems = AdfDomUtils.getChildElements(target.parentNode);
for (var j = 0;j < allItems.length;j++) {
var item = allItems[j];
this._updateSelectedStyle(item, false)
}
this._updateSelectedStyle(target, true)
}
//Customize from here
if (component.registedAutoSuggest) {
return;
}
component.registedAutoSuggest = true;
var contentNode = AdfDhtmlEditableValuePeer.GetContentNode(component);
var that = this;
contentNode.addEventListener('paste', function (event) {
var page = AdfPage.PAGE;
if (that._timerId) {
page.rescheduleTimer(that._timerId, 500)
}
else {
that._timerId = page.scheduleTimer(that, that._autoSuggest, component, 500)
}
});
}
};
}
推荐阅读
- typescript - 是否可以在库中显式导入全局类型(如“dom”)?
- r - 在R中满足条件时如何重新运行更改变量的函数?
- java - 如何从静态函数返回函数接口?
- python - 为什么我的 gpu 没有在 torch 中使用?
- python - 在 Jupitor Notebook 中安装 shap 时出错
- java - 如何使用 mongostat 一整天在 Mongo 数据库上获取创建/插入/删除/更新的总数?
- javascript - 调度外部组件
- jquery - 根据 c# linq 输出分组
- python - 处理 ZeroDivisionError:当我无法丢弃 0 时进行浮点除法
- visual-studio - 通过任务在 csproj 中自动设置程序集版本