如何从托管Bean填充Primefaces自动填充

时间:2017-11-15 15:40:13

标签: primefaces autocomplete

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

<p:autoComplete value="#{consultaEventoCargoMBean.idUaSelecionada}" completeMethod="#{consultaEventoCargoMBean.completeUADestino}" var="ua" itemLabel="#{ua.name}" itemValue="#{ua.id}" forceSelection="false" appendTo="@this" />

其中idUaSelecionadaua.id为整数,ua.name为字符串。

我的问题是当我加载页面来更新数据时。我的idUaSelecionada已经填满,一个对象准备作为建议传递(它将是唯一元素的列表)。我无法找到填充此自动填充的方法 - 至少是文本组件。

阅读自动填充源代码,我看到有一个名为suggestions的列表。虽然这个列表没有setter,但它有一个getter。但如果我尝试autocomplete.getSuggestions().add(...)之类的话,我会得到NullPointerException。我发现填充此列表的唯一方法是通过completeMethod tag属性指示的方法,该属性接收String并返回List。

我无法在互联网上找到如何填写此列表。这就是为什么我要问这个问题,看看是否有人有任何答案。

谢谢,

Rafael Afonso

1 个答案:

答案 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中测试过它。