我有一个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
为字符串。
我的问题是当我加载页面来更新数据时。我的idUaSelecionada
已经填满,一个对象准备作为建议传递(它将是唯一元素的列表)。我无法找到填充此自动填充的方法 - 至少是文本组件。
阅读自动填充源代码,我看到有一个名为suggestions
的列表。虽然这个列表没有setter,但它有一个getter。但如果我尝试autocomplete.getSuggestions().add(...)
之类的话,我会得到NullPointerException
。我发现填充此列表的唯一方法是通过completeMethod
tag属性指示的方法,该属性接收String并返回List。
我无法在互联网上找到如何填写此列表。这就是为什么我要问这个问题,看看是否有人有任何答案。
谢谢,
Rafael Afonso
答案 0 :(得分:1)
您可以使用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>
实际上,每当您刷新建议列表并希望将建议加载到p:autocomplete
时,只需在最后调用triggerSuggestionLoading()
方法(在所有过程完成后)。
我已在Chrome和Edge中测试过它。