Spring MVC jQuery Autocomplete-Beispiel

Beispiel für Spring MVC + jQuery Autocomplete

jquery autocomplete

In diesem Tutorial zeigen wir Ihnen, wie Sie das Autocomplete-Plugin von jQuery in Spring MVC integrieren.

Verwendete Tools und Bibliotheken:

  1. Spring MVC 3.2

  2. Plugin für die automatische Vervollständigung von jQuery -github

  3. Maven 3

  4. Eclipse IDE

Überprüfen Sie die Abläufe des Tutorials:

  1. Eine HTML-Seite mit einem Textfeld.

  2. Wenn der Benutzer an das Textfeld gebunden ist, wird eine Ajax-Anforderung (über das Autocomplete-Plugin) an Spring Controller gesendet.

  3. Spring verarbeitet die Benutzereingaben und gibt das Suchergebnis zurück (im JSON-Format).

  4. Das "Autocomplete Plugin" verarbeitet das zurückgegebene Ergebnis und zeigt das Autocomplete-Vorschlagsfeld an. Siehe Abbildung oben.

1. Projektverzeichnis

Überprüfen Sie die endgültige Projektverzeichnisstruktur, ein Standard-Maven-Projekt.

spring-mvc-jquery-autocomplete-directory

2. Projektabhängigkeiten

Deklariert Spring, JSTL und Jackson (JSON-Ergebnis).

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 - Datenanbieter

Wenn ein Spring-Controller vom Benutzer eine Anforderung "/getTags" ausgibt, filtert Spring das Ergebnis mit Benutzereingaben heraus und gibt es im JSON-Format zurück.

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 Plugin

Die folgende JSP-Seite sollte selbsterklärend sein.

WEB-INF/pages/example.jsp

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




" rel="stylesheet">


  

Spring MVC + jQuery + Autocomplete example

#1. Das Plugin für die automatische Vervollständigung generiert die Vorschlagsliste mit den folgenden HTML-Tags.

...
...
...

So müssen Sie es zum Beispiel stylen:

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. Für dieses "Autocomplete-Plugin" muss die Antwort vom Server ein JSON-formatiertes JavaScript-Objekt wie folgt sein:

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

#3. Überprüfen Sie die folgende Ajax-Anfrage

  $('#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 - Serverseitige URL oder Rückruffunktion, die die JSON-Daten zurückgibt.

  2. paramName - In diesem Fall werdengetTags?tagName=user input generiert. Standard ist?query=user input.

  3. Trennzeichen - Für mehrere Vorschläge.

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

5. Demo

Starten Sie und greifen Sie auf „http://localhost:8080/SpringMvcExample/“ zu.

Geben Sie "java" ein.

jquery autocomplete

Geben Sie "r" ein.

jquery autocomplete

Quellcode herunterladen

Herunterladen -SpringMvc-Autocomplete-Example.zip (48 KB)