10
votes

Comment puis-je obtenir des données du contrôleur de printemps par Ajax?

J'ai un ajax code> sur un jsp code> page qui appelle un contrôleur de ressort via URL / chèque code>.

@RequestMapping("/check")
public String check(@RequestParam Integer id, HttpServletRequest request,
        HttpServletResponse response, Model model) {
    boolean a = getSomeResult();
    if (a == true) {
        model.addAttribute("alreadySaved", true);
        return view;
    } else
        model.addAttribute("alreadySaved", false);

    return view;
}


0 commentaires

4 Réponses :


10
votes

Vous devez ajouter l'annotation de @Responsebodod pour les appels Spring Ajax Exemple

@RequestMapping("/check")     
@ResponseBody
public String check(@RequestParam Integer id, HttpServletRequest request, HttpServletResponse response, Model model) {
    boolean a = getSomeResult();
    if (a == true) {
        model.addAttribute("alreadySaved", true);
        return view;
    } else {
        model.addAttribute("alreadySaved", false);
        return view;
    }
}


4 commentaires

D'accord. Comment puis-je obtenir cette réponse sur le côté de la vue?


Cela signifie que la vue est vide.Veuillez renvoyer l'objet modèle comme réponse.


Non, la vue n'est pas vide. La vue est injectée au printemps du servlet SpringMVC. C'est une chaîne qui résout pour charger un JSP.


J'ai eu une idée fausse. Je l'ai eu maintenant. Merci :)



1
votes

Pièce du contrôleur

Vous devez ajouter l'annotation de la carte @Response pour les appels de ressort Ajax exemple Exemple P>

Partie de la vue p>

$.ajax({
    type : "GET",
    url : "${pageContext.request.contextPath}/check",
    data : {
        "id" : ${articleCount}
    },
    success: function(data){
        $('#input_field').val(data);
    }
});


0 commentaires

1
votes

Lorsque vous essayez de renvoyer les valeurs de la demande AJAX, vous devez utiliser le @Responsebody code> annotation. Comme votre méthode return Type est code> String CODE> Assurez-vous de retourner la valeur de la chaîne et non de votre vue sur le JSP.

car il rendra à nouveau le JSP la réponse P>

success: function(data){
    alert(data);
}


2 commentaires

Mais je dois retourner la vue de cette méthode car sans cela, le printemps ne sera pas en mesure de charger le JSP.


@najus pas le concept d'Ajax est de rafraîchir la partie de la page afin qu'il suffit de renvoyer la valeur de retour seule. Comme vous chargez la même page



3
votes

Utilisez @Responsebody code>

Spring liera la valeur de retour au corps de réponse HTTP sortant lorsque vous ajoutez @Responsebody code> Annotation. P>

@ResponseBody
public String check(@RequestParam Integer id, HttpServletRequest request, HttpServletResponse response, Model model) {
    boolean a = getSomeResult();
    if (a == true) {
        return "already saved";
    } 
    return "error exist";
}


0 commentaires