Пример автозаполнения Spring MVC jQuery

Spring MVC + пример автозаполнения jQuery

jquery autocomplete

В этом уроке мы покажем, как интегрировать плагин автозаполнения jQuery с Spring MVC.

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

  1. Spring MVC 3.2

  2. Плагин автозаполнения jQuery -github

  3. Maven 3

  4. Eclipse IDE

Просмотрите потоки учебника:

  1. HTML-страница с текстовым полем.

  2. Если пользователь привязывает текстовое поле, он запускает Ajax-запрос (через плагин автозаполнения) к контроллеру Spring.

  3. Spring обрабатывает пользовательский ввод и возвращает результат поиска (в формате JSON).

  4. «Плагин автозаполнения» обрабатывает возвращенный результат и отображает окно с предложением автозаполнения. Смотрите рисунок выше.

1. Каталог проектов

Просмотрите окончательную структуру каталогов проекта, стандартный проект Maven.

spring-mvc-jquery-autocomplete-directory

2. Зависимости проекта

Объявляет Spring, JSTL и Джексон (результат JSON).

pom.xml

       
        3.2.2.RELEASE
        1.2
        1.9.10
    

    
        
        
            jstl
            jstl
            ${jstl.version}
        

        
        
            org.springframework
            spring-core
            ${spring.version}
        

        
        
            cglib
            cglib
            2.2.2
        

        
            org.springframework
            spring-web
            ${spring.version}
        

        
            org.springframework
            spring-webmvc
            ${spring.version}
        

        
        
            org.codehaus.jackson
            jackson-mapper-asl
            ${jackson.version}
        

    

3. Spring MVC - поставщик данных

Контроллер Spring, если пользователь выдает запрос «/getTags», Spring отфильтрует результат с вводом пользователя и вернет его в формате JSON.

MainController.java

package com.example.web.controller;

import java.util.ArrayList;
import java.util.List;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;

import com.example.web.domain.Tag;

@Controller
public class MainController {

    List data = new ArrayList();

    MainController() {
        // init data for testing
        data.add(new Tag(1, "ruby"));
        data.add(new Tag(2, "rails"));
        data.add(new Tag(3, "c / c++"));
        data.add(new Tag(4, ".net"));
        data.add(new Tag(5, "python"));
        data.add(new Tag(6, "java"));
        data.add(new Tag(7, "javascript"));
        data.add(new Tag(8, "jscript"));

    }

    @RequestMapping(value = "/", method = RequestMethod.GET)
    public ModelAndView getPages() {

        ModelAndView model = new ModelAndView("example");
        return model;

    }

    @RequestMapping(value = "/getTags", method = RequestMethod.GET)
    public @ResponseBody
    List getTags(@RequestParam String tagName) {

        return simulateSearchResult(tagName);

    }

    private List simulateSearchResult(String tagName) {

        List result = new ArrayList();

        // iterate a list and filter by tagName
        for (Tag tag : data) {
            if (tag.getTagName().contains(tagName)) {
                result.add(tag);
            }
        }

        return result;
    }

}

Tag.java

package com.example.web.domain;

public class Tag {

    public int id;
    public String tagName;

    //getter and setter methods

    public Tag(int id, String tagName) {
        this.id = id;
        this.tagName = tagName;
    }

}

mvc-dispatcher-servlet.xml – Map the resources folder.



    

    
        
            /WEB-INF/pages/
        
        
            .jsp
        
    

    

    

4. Плагин jQuery Automplete

Страница JSP ниже должна быть понятной.

WEB-INF/pages/example.jsp

<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>




" rel="stylesheet">


  

Spring MVC + jQuery + Autocomplete example

#1. Плагин автозаполнения сгенерирует список предложений со следующими HTML-тегами.

...
...
...

Итак, вам нужно его стилизовать, например:

main.css

.autocomplete-suggestions { border: 1px solid #999; background: #FFF; overflow: auto; }
.autocomplete-suggestion { padding: 5px 5px; white-space: nowrap; overflow: hidden; font-size:22px}
.autocomplete-selected { background: #F0F0F0; }
.autocomplete-suggestions strong { font-weight: bold; color: #3399FF; }

#2. Для этого «плагина автозаполнения» ответ сервера должен быть объектом JavaScript в формате JSON, например:

{
    suggestions: [
        { value: "Java",        data: "1001" },
        { value: "JavaScript",  data: "1002" },
        { value: "Ruby",        data: "1003" }
    ]
}

#3. Просмотрите следующий запрос Ajax

  $('#w-input-search').autocomplete({
    serviceUrl: '${pageContext.request.contextPath}/getTags',
    paramName: "tagName", // ?tagName='user input'
    delimiter: ",",
    transformResult: function(response) {

       return {

          suggestions: $.map($.parseJSON(response), function(item) {
         return { value: item.tagName, data: item.id };
          })

       };

    }
   });
  1. serviceUrl - URL-адрес на стороне сервера или функция обратного вызова, которая возвращает данные JSON.

  2. paramName - в этом случае он сгенерируетgetTags?tagName=user input. По умолчанию?query=user input.

  3. разделитель - для нескольких предложений.

  4. $.parseJSON (response) – Java will return JSON formatted data, so, you need to convert it to a JavaScript object.

5. Demo

Запустите и получите доступ к «http://localhost:8080/SpringMvcExample/».

Введите «java»

jquery autocomplete

Введите «r»

jquery autocomplete

Скачать исходный код

Скачать -SpringMvc-Autocomplete-Example.zip (48 КБ)