#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)