2017-10-15 1 views
0

J'ai un RestController qui retourne tous les utilisateurs de la base de données au format JSON:Spring Boot autocomplete ajax

@RequestMapping(path="users", method=RequestMethod.GET) 
public List<User> getAllUsers(){ 
    return userService.getAllUsers(); 
} 

J'ai un champ d'entrée que je veux saisie semi-automatique en tapant le nom de l'utilisateur:

<input id="user" type="text"> 

L'appel Ajax:

$("#user").keyup(function(e) { 
    var username = e.target.value; 
    delaySearch && clearTimeout(delaySearch); 
    delaySearch = setTimeout(() => { 
    var url="/clients/"; 
    $.getJSON(url, function(data){ 
     ..? 
} 
    }, 200); 
}); 

}

Comment est-ce que je fais filtrer par les utilisateurs retournés du contrôleur? Ai-je besoin d'un autre contrôleur qui saisit les lettres dans le champ de saisie? Je suis débutant, donc je suis désolé si c'est une question simple. La classe User a un champ Chaîne pour le nom et un champ pour le nom de famille. J'aurais besoin des deux pour montrer. Merci d'avance!!

Répondre

0

Votre méthode getAllUsers devra prendre un paramètre, puis vous devez filtrer les résultats obtenus à partir de la méthode .getAllUsers():

@RequestMapping(path="users", method=RequestMethod.GET) 
public List<User> getAllUsers(@RequestParam String name){ 
    List<User> results = userService.getAllUsers(); 
    return results.stream.filter(user -> user.contains(name)).collect(Collectors.toList()); 
} 

Et alors vous avez besoin de filtrer les résultats par le paramètre.

Mais vous ne voulez probablement pas l'exécuter comme ceci, vous pourriez potentiellement passer de très longues listes d'utilisateurs pour chaque coup de clé. Je suggère de mettre en œuvre une méthode .getAllUsersContaining(String name) pour interroger votre base de données ou bien vous stockez vos données