2014-11-07 9 views
5

Ho un ajax su una pagina jsp che chiama un controller a molla tramite l'URL /check.Come posso ottenere dati dal controller a molla da ajax?

$.ajax({ 
    type : "GET", 
    url : "${pageContext.request.contextPath}/check", 
    data : { 
    "id" : ${articleCount} 
    }, 
    success: function(data){ 
    //response from controller 
    } 
}); 

Ora, il controller sembra,

@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; 
} 

ho inviato i dati utilizzando il modello e ho cercato di accedervi in ​​success: function(data) come "${alreadySaved}" ma mostra vuota.

C'è un modo per ricevere i dati di true/false nella pagina di visualizzazione?

risposta

5

È necessario aggiungere l'annotazione @ResponseBody per la primavera chiamate AJAX esempio

@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; 
    } 
} 
+0

Va bene. Come posso ottenere quella risposta dal lato della vista? – Sujan

+0

data.alreadySaved – Madhesh

+0

data.alreadySaved mostra un valore non definito in jsp. – Sujan

0

controller parte

È necessario aggiungere l'annotazione @ResponseBody per la primavera chiamate AJAX esempio

View Parte

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

Quando si tenta di restituire i valori f dalla richiesta Ajax, è necessario utilizzare l'annotazione @ResponseBody. Siccome il tuo metodo restituisce il tipo è String assicurati di restituire il valore stringa e non la tua vista al jsp.

Dal momento che renderà la jsp di nuovo la risposta

@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"; 
} 

E nel tuo jsp,

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

Ma ho bisogno di restituire la vista da quel metodo, perché senza quello, primavera non sarà in grado di caricare il jsp. – Sujan

+0

@najus No, il concetto di ajax è di aggiornare la parte della pagina, quindi è sufficiente inviare il valore restituito da solo. Mentre stai caricando la stessa pagina –