передача данных из коллекции java в jquery (Autocomplete)

317
23 января 2017, 20:18

Добрый день! Изучаю jquery(Autocomplete), и столкнулся с такой проблемой. если у меня список значений в заданном массиве в скрипте то все работает:

<script type="text/javascript"> 
        $(function() { 
 
            var tags = ["tag1", "tag2", "atag3", "btag4", "aaa5"]; 
             
            $('#acInput').autocomplete({ 
                source: tags 
            }) 
        }); 
    </script>

Но мне необходимо получать данные из коллекции java, например обратившись к контроллеру по ссылке. Читал, что с коллекцией java не будет работать, и как вариант перевести коллекцию в json формат.

Пробовал писать использовать такой контроллер:

@RequestMapping(value = "/tags", method = RequestMethod.GET)
    public String getTags() {
        List<Tag> tags = (List<Tag>) tagService.getAll();
        List<String> tagsName = new ArrayList<String>();
        for (Tag tag : tags){
            tagsName.add(tag.getName());
        }
        String jsonStr = new Gson().toJson(tagsName);
        return jsonStr; 
    }

и в скрипте указывал ссылку на контроллер:

$(function() { 
             
    $('#acInput').autocomplete({ 
                source: '/tags' 
    }) 
	 
});

и ничего не работает. Помогите пожалуйста разобраться, как это все запустить. И какие вообще есть варианты передавать данные в скрипт из коллекции java, чтобы это все работало? К примеру, у меня на этой jsp есть доступ к необходимой коллекции, могу ли я ее использовать в скрипте для решения данной задачи не вызывая отдельно метод контроллера?

Заранее прошу прощение, может не совсем понятно изложил проблему.

Спасибо

Дополнение: переписал метод getTags @RequestMapping(value = "/tags", method = RequestMethod.GET) public @ResponseBody String getTags() { List tags = (List) tagService.getAll(); List tagsName = new ArrayList(); for (Tag tag : tags){ tagsName.add(tag.getName()); } String jsonStr = new Gson().toJson(tagsName); System.out.println(jsonStr); return new Gson().toJson(tagsName); }

автоподстановка теперь работает, но показывает все теги. То есть сортировка не работает, а просто вываливает все данные. Как запустить сортировку?

Answer 1

У вас в коде не хватает галочек для tags

<script type="text/javascript">
        $(function() {
            $('#acInput').autocomplete({
                source: 'tags'
            })
        });
</script>
Answer 2

переписал метод

@RequestMapping(value = "/tags", method = RequestMethod.GET) public @ResponseBody String getTags() {  
  List<Tag>tags = (List<Tag>) tagService.getAll();  
  List<String>tagsName = new ArrayList<String>();  
    for (Tag tag : tags){  
      tagsName.add(tag.getName());  
    }  
  String jsonStr = new Gson().toJson(tagsName);    System.out.println(jsonStr);  
  return new Gson().toJson(tagsName); }

автоподстановка работает. Вылезли другие проблемы но это наверное тема другого вопроса.

READ ALSO
Как сделать анимацию появления блока в ангуляре?

Как сделать анимацию появления блока в ангуляре?

Как сделать чтобы когда нажимаем второй раз на кнопку, то блок плавно возвращался назад? jquery использовать нельзя, проект делается на ангуляре

431
CSS-спрайты и border-image

CSS-спрайты и border-image

Я пытаюсь делать кое-какое веб-приложение и мне нужно, чтобы текстуры всех элементов гуи хранились в виде одного изображения (скина)С одной...

347
Обтекание контейнеров

Обтекание контейнеров

Есть контейнеры с свойством float:leftпод каждым контейнеромКонтейнер с описанием при добавлении больше одного слова

367
Плавное изменение высоты на CSS 3 [требует правки]

Плавное изменение высоты на CSS 3 [требует правки]

Имею сайт на ajax, и при переходах по страницам на мобильных устройствах заметил, что контент слишком резко появляется, и блоки side-bar из-за этого...

388