2015-01-14 2 views
0

Я использую PrimeFaces 3.5. У меня есть автозаполнение, и я хочу, чтобы в поиске было загружено 20 строк, когда пользователь прокручивается вниз, чтобы загрузить более 10 результатов (если они есть). Это мое автозаполнение:Автозаполнение, загрузка записей по запросу

<p:autoComplete rendered="#{autoCompleter.hasCompletions}" widgetVar="${id}" 
     id="${id}" style="position: relative" 
     value="#{autoCompleter.value}" 
     completeMethod="#{autoCompleter.suggest}" 
     var="s" 
     itemLabel="#{s.name}" 
     itemValue="#{s}" 
     converter="#{autoCompleter.converter}" 
     forceSelection="true" 
     queryDelay="500" 
     scrollHeight="400" 
     required="#{required}" 
     requiredMessage="#{msgs['label.address.autocompleter.required']}" 
     styleClass="#{required ? 'ui-input-required' : ''}" 
     maxResults="#{autoCompleter.maxResult}"> 

     <p:ajax event="change" 
       partialSubmit="true" 
       update="#{update}" 
       onstart="if(${id}.panel.is(':visible')) return false;"/> 

     <p:ajax event="itemSelect" 
       partialSubmit="true" 
       update="#{update}"/> 

     <p:ajax event="blur" 
       partialSubmit="true" 
       update="#{update}" 
       disabled="true"/> 

     <ui:insert name="menu"> 
      <p:column>#{s.name}</p:column> 
     </ui:insert> 

    </p:autoComplete> 

И я добавил этот JavaScript, чтобы сделать загрузку следующих результатов кусков:

<p:remoteCommand name="loadNextSettlementsChunk" 
       action="#{autoCompleter.suggest}" 
       update="${id}"  
       partialSubmit="true" 
       immediate="true"/> 
<script type="text/javascript"> 
    jQuery(function($) { 
     $('.ui-autocomplete-panel').bind('scroll', function() { 
      if($(this).scrollTop() + $(this).height() >= $(this)[0].scrollHeight) { 
       loadNextSettlementsChunk(); 
      } 
     }); 
    }); 
</script> 

Но вместо загрузки следующих результатов я получаю предупреждение сообщение:

Невозможно найти соответствие навигации случая с от ракурса идентификатора «/ Poli cies/index.xhtml 'for action' # {autoCompleter.suggest} 'с результат' [Văleni (Viişoara), Viişoara, Viişoara (Тодирешти), Viişoara (Vaslui), Viişoara, Viişoara, Viişoara, Viişoara, Viişoara, Viişoara , Viisoara-Moşneni, Viisoara, Viisoara слюда, Viisoara (Păuneşti), Viisoara (Видра), Viisoara, Viisoara, Viisoara, Viisoara, Viisoara (Штефана чел Маре), Viisoara (Тыргу ​​Trotuş), Viisoara, Viisoara, Viilor , Valea Viilor, Dealu Viilor, Dealu Viilor (Moşoaia), Dealu Viilor (Poiana Lacului)] ' и в скобках [] - мои результаты. Как исправить это для правильной работы?

ответ

0

Атрибут action должен указывать на метод, который вызывает некоторую бизнес-логику и возвращает либо недействительным или Строка, но результат вашего метода suggest является ArrayList. Поэтому я предлагаю вам использовать actionListener вместо action, чтобы вызвать вашу бизнес-логику без страницы навигации.

<p:remoteCommand name="loadNextSettlementsChunk" 
       actionListener="#{autoCompleter.suggest}" 
       update="${id}"  
       partialSubmit="true" 
       immediate="true"/> 
+0

Я пробовал эти два, но он не работает. Только предупреждающее сообщение не отображается. Если я передаю $ {id} для обновления атрибута remoteCommand, он выбирает последнюю запись в поле ввода автозаполнения. –

Смежные вопросы