如何从托管Bean填充Primefaces自动完成
我有一个primefaces自动完成,如下所示:如何从托管Bean填充Primefaces自动完成,primefaces,autocomplete,Primefaces,Autocomplete,我有一个primefaces自动完成,如下所示: <p:autoComplete value="#{consultaEventoCargoMBean.idUaSelecionada}" completeMethod="#{consultaEventoCargoMBean.completeUADestino}" var="ua" itemLabel="#{ua.name}" itemValue="#{ua.id}" forceSelection="false" appendTo="@this
<p:autoComplete value="#{consultaEventoCargoMBean.idUaSelecionada}" completeMethod="#{consultaEventoCargoMBean.completeUADestino}" var="ua" itemLabel="#{ua.name}" itemValue="#{ua.id}" forceSelection="false" appendTo="@this" />
其中,idUaSelecionada
和ua.id
是整数,ua.name
是字符串
我的问题是当我加载页面以更新数据时。MyidUaSelecionada
已填充,并且一个对象已准备好作为建议传递(它将是唯一元素的列表)。我找不到一种方法来填充这个自动完成-至少是文本部分
在阅读自动完成源代码时,我看到有一个名为建议的列表。虽然这个列表没有setter,但它有getter。但是如果我尝试类似于autocomplete.getSuggestions().add(…)
的方法,我会得到一个NullPointerException
。我发现填充此列表的唯一方法是通过completeMethod
tag属性指示的方法,该方法接收字符串并返回列表
我在互联网上找不到如何填写这个清单。这就是为什么我问这个问题,看看是否有人有任何答案
谢谢
Rafael Afonso您可以使用JavaScript触发执行completeMethod
标记属性和加载建议中定义的方法
假设您希望在页面加载时执行此操作,请将此脚本添加到页面中
<script>
function triggerSuggestionLoading() {
//finds autocomplete input text field
var autocomplete = document.getElementsByClassName('ui-autocomplete-input')[0];
//sets autocomplete query, for example
autocomplete.value="test";
//simulates key press triggering completeMethod to be executed
autocomplete.dispatchEvent(new Event('keydown'));
autocomplete.dispatchEvent(new Event('input'));
autocomplete.dispatchEvent(new Event('keyup'));
//sets focus on autocomplete
autocomplete.dispatchEvent(new Event('focus'));
//clears autocomplete text
autocomplete.value="";
}
window.onload = function() {
triggerSuggestionLoading();
};
</script>
函数triggerSuggestionLoading(){
//查找自动完成输入文本字段
var autocomplete=document.getElementsByClassName('ui-autocomplete-input')[0];
//例如,设置自动完成查询
autocomplete.value=“测试”;
//模拟要执行的按键触发completeMethod
自动完成dispatchEvent(新事件('keydown'));
自动完成dispatchEvent(新事件(“输入”);
自动完成dispatchEvent(新事件('keyup'));
//将焦点设置为自动完成
自动完成dispatchEvent(新事件(“焦点”);
//清除自动完成文本
自动完成。值=”;
}
window.onload=函数(){
triggerSuggestionLoading();
};
实际上,每当您刷新建议列表并希望将建议加载到p:autocomplete
中时,只需在最后调用triggersuggestionload()
方法(在所有过程完成后)
我已经在Chrome和Edge中对其进行了测试。尝试使用setSuggetions(…)
?没有建议设置器。谢谢你的回答。我改变了这个自动完成的方法,所以我不会使用你的建议。但无论如何,我希望它能对其他人有用。