Spring MVC Exemple de saisie semi-automatique jQuery

Exemple de saisie semi-automatique Spring MVC + jQuery

jquery autocomplete

Dans ce tutoriel, nous vous montrons comment intégrer le plugin de saisie semi-automatique jQuery avec Spring MVC.

Outils et bibliothèques utilisés:

  1. Spring MVC 3.2

  2. Plug-in de saisie semi-automatique jQuery -github

  3. Maven 3

  4. Eclipse IDE

Consultez les flux du didacticiel:

  1. Une page HTML, avec une zone de texte.

  2. Si l'utilisateur est lié à la zone de texte, il lancera une demande Ajax (via un plugin de saisie semi-automatique) au contrôleur Spring.

  3. Spring traite l'entrée utilisateur et renvoie le résultat de la recherche (au format JSON).

  4. Le «plugin de saisie semi-automatique» traite le résultat renvoyé et affiche la boîte de suggestions de saisie semi-automatique. Voir figure ci-dessus.

1. Répertoire des projets

Passez en revue la structure finale du répertoire du projet, un projet Maven standard.

spring-mvc-jquery-autocomplete-directory

2. Dépendances du projet

Déclare Spring, JSTL et Jackson (résultat 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 - Fournisseur de données

Un contrôleur Spring, si l'utilisateur émet une requête «/getTags», Spring filtrera le résultat avec l'entrée utilisateur et le renverra au format 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. Plugin de saisie automatique jQuery

La page JSP ci-dessous doit être explicite.

WEB-INF/pages/example.jsp

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




" rel="stylesheet">


  

Spring MVC + jQuery + Autocomplete example

#1. Le plugin de saisie semi-automatique générera la liste de suggestions avec les balises HTML suivantes.

...
...
...

Vous devez donc le styliser, par exemple:

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. Pour ce «plugin de saisie semi-automatique», la réponse du serveur doit être un objet JavaScript au format JSON comme celui-ci:

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

#3. Examiner la requête Ajax suivante

  $('#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 côté serveur ou fonction de rappel qui renvoie les données JSON.

  2. paramName - Dans ce cas, il généreragetTags?tagName=user input. La valeur par défaut est?query=user input.

  3. délimiteur - Pour plusieurs suggestions.

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

5. Demo

Démarrez et accédez à «http://localhost:8080/SpringMvcExample/».

Tapez «java»

jquery autocomplete

Tapez «r»

jquery autocomplete

Télécharger le code source

Télécharger -SpringMvc-Autocomplete-Example.zip (48 KB)