如何从托管Bean填充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

我有一个primefaces自动完成,如下所示:

<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
是字符串

我的问题是当我加载页面以更新数据时。My
idUaSelecionada
已填充,并且一个对象已准备好作为建议传递(它将是唯一元素的列表)。我找不到一种方法来填充这个自动完成-至少是文本部分

在阅读自动完成源代码时,我看到有一个名为
建议的列表。虽然这个列表没有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(…)
?没有建议设置器。谢谢你的回答。我改变了这个自动完成的方法,所以我不会使用你的建议。但无论如何,我希望它能对其他人有用。