AJAX JSF h:inputText

339
21 июня 2017, 02:35

Есть facelet terminology.xhtml

               <div class="termins col-lg-6">
                    <f:view>
                        <h:form id="form">
                            <h:inputText value="#{textContentController.searchString}" id="search-input" />
                        </h:form>
                    </f:view>
                    <div class="termin-panel">
                        <ui:repeat var="termin" value="#{textContentController.termins}">
                            <div>
                                <a href="terminology.jsf?id=#{termin.id}">#{termin.name}</a> 
                            </div><br/>
                        </ui:repeat> 
                    </div>
                </div>
                <div>
                    #{textContentController.terminDescription}
                </div>
                <h:outputScript library="js" name="main.js"/>

Есть скрипт main.js

$(function ()
{
    $('#form').children().keyup(function () {
        $.post('terminology.jsf', function (data)
        {
            console.log($(data).find('.termin-panel').html());
            $('.termin-panel').empty();
            $('.termin-panel').html($(data).find('.termin-panel').html());
        });
    });
});

При отправке формы в блок .termin-panel загружаются данные из результата с БД в зависимости от того, что было введено в h:inputText. Т.е. осуществляется поиск. Вопрос: как правильно организовать AJAX-загрузку данных при вводе в h:inputText? Почему-то скрипт не не получает новых данных, загружаются те же данные из страницы.

Answer 1

JSF работает не так. На JSF надо делать как-то так

<div class="termins col-lg-6">
     <h:form id="form">
         <h:inputText value="#{textContentController.searchString}" id="search-input">
             <f:ajax event="keyup" render=":searchResult"/>
         </h:inputText
     </h:form>
     <h:panelGroup id="searchResult" layout="block" styleClass="termin-panel">
         <ui:repeat var="termin" value="#{textContentController.termins}">
             <div>
                 <a href="terminology.jsf?id=#{termin.id}">#{termin.name}</a> 
             </div><br/>
         </ui:repeat> 
     </h:panelGroup>
</div>

f:ajax - стандартный тэг для отправки формы на сервер при возникновении указанного события с помощью ajax (неожиданно так). Его атрибут render перечисляет id компонентов, которые надо обновить.
Как видно то, что Вы пытаетесь изобразить своим скриптом, уже встроено в JSF, только правильно.

А по Вашему скрипту что-то не понятно. Он же не отправляет на сервер ничего? Просто POST запрос без каких-либо параметров? Что сервер должен искать, если ему не поступает строка поиска?

READ ALSO
Подключение css файлов в webpack 2 (ReferenceError: ExtractTextPlugin)

Подключение css файлов в webpack 2 (ReferenceError: ExtractTextPlugin)

Пытаюсь подключить css файл в webpack 2Для этого устанавливаю "css-loader","file-loader","less-loader","sass-loader","style-loader", "extract-text-webpack-plugin","url-loader"; создаю отдельный...

380
to Array from Textarea. что не так?

to Array from Textarea. что не так?

В коде можно выделить несколько ошибок:

263