rich: suggestionBox с suggestionAction в JavaScript

#javascript #jsf #richfaces #seam2

#javascript #jsf #богатые интерфейсы #seam2

Вопрос:

У меня есть ввод с <rich:suggestionBox> помощью . Он очень хорошо работает с a suggestionAction в компоненте. Но вместо этого я хочу реализовать это suggestionAction в JavaScript.

Вот код моего <rich:suggestionBox> :

 <h:inputText id="etabinput" />
<rich:suggestionbox height="200" width="200"
    suggestionAction="#{etablissementList.autoComplete}" var="etab" 
    for="etabinput" fetchValue="#{etab.id}    #{etab.nom}" id="suggestion" tokens=",">
    <h:column>
        <h:outputText value="#{etab.type}" />
    </h:column>
    <h:column>
        <h:outputText value="#{etab.localite}" />
    </h:column>
    <a:support ajaxSingle="true" event="onselect">
        <f:setPropertyActionListener value="#{etab}" target="#{offreHome.instance.etablissement}"/>
    </a:support>
</rich:suggestionbox>
  

И вот suggestionAction() метод в моем компоненте:

 public List<Etablissement> autoComplete(Object o) {
    String sql =  this.getEjbql()   " where lower(etablissement.localite) like concat(lower('" o.toString() "'),'%')";
    return this.getEntityManager().createQuery(sql).getResultList();   
}
  

Есть ли способ вызвать метод из JavaScript, не вызывая сервер каждый раз?

Комментарии:

1. Я не понимаю, как это полезно. С помощью JavaScript вам также нужно будет каждый раз обращаться к серверу, чтобы получать предложения. Или вы хотели бы перенести все возможные предложения в JavaScript при рендеринге HTML? Я также не понимаю, насколько это полезно, поскольку ваш HTML-ответ, вероятно, увеличится на 1 МБ или что-то в этом роде. У вас, кстати, есть потенциальная дыра для SQL-инъекций. Используйте параметризованные запросы.

2. с помощью фактического метода каждый раз, когда я добавляю символ во входные данные, запускается sql-запрос и вызывается сервер. Таким образом, предлагаемое решение состоит в том, чтобы извлекать список только один раз при загрузке страницы, а затем выполнять фильтрацию с помощью метода javascript (suggestionAction)