我是Spring MVC和AJAX的新手,我有以下疑问。
使用jQuery我正在执行这个AJAX请求:
$.ajax({
type : "GET",
url : "salvaAppuntiMinisteriale",
data: {
'codiceProgetto': codiceProgetto,
'appuntiMinisteriale': appuntiMinisteriale
}
}).done(function(response) {
showSuccessMessage('Nota inserita');
document.open();
document.write(response);
document.close();
}).error(function(xhr) {
manageError(xhr);
});
正如您所看到的,对 salvaAppuntiMinisteriale 资源执行请求,向其传递两个值(从我的页面检索,它可以正常工作)。
然后,在Spring MVC控制器类中,我有这个处理先前AJAX请求的控制器方法:
@RequestMapping(value = "salvaAppuntiMinisteriale", method=RequestMethod.GET)
public String salvaAppuntiMinisteriale(@RequestParam String codiceProgetto, @RequestParam String appuntiMinisteriale, Model model) throws Exception {
System.out.println("CODICE PROGETTO: " + codiceProgetto + " NOTA MINISTERIALE: " + appuntiMinisteriale);
Twp1007Progetto progetto = progettoService.getProgetto(Integer.parseInt(codiceProgetto));
progetto.setDesNotApp(appuntiMinisteriale);
progetto.setCodPgmUltMov("Inserimento nota minitseriale"); // Codice azione ultima modifica
progetto.setCodUteUltMov(this.getUtenteConnesso().getUsername()); // Utente ministeriale che ha variato l'anticipo
progetto.setDatOraUltMov(new Date()); // Data ed ora della variazione dell'anticipo
progettoService.salvaNotaAppunto(progetto);
model.addAttribute("progetto", progetto);
return "visualizzaProspetto/prospettoRendicontazione";
}
这很好用。它正确处理上一个请求并返回整个视图的逻辑名称,这些视图将在当前选项卡中通过这些行完全重新加载到我之前的jQuery代码中:
document.open();
document.write(response);
document.close();
这样可以正常但不是我想要改变这种行为,我想避免返回并重新加载整个页面。
所以我需要做的是以下操作:
我不希望之前的 salvaAppuntiMinisteriale()控制器方法返回一个逻辑视图名称(因为我没有重新加载页面)。
salvaAppuntiMinisteriale()方法必须从我的 progetto 对象返回** appuntiMinisteriale 的值(我必须检索它以确保值正确保存在数据库中,但现在这并不重要)。也许我要将它放入 ResponseBody ?
在我的jQuery完成的 done()调用的回调函数中,我必须检索以前的值,以便我可以将HTML字段的内容更新到我的页面中。
那么,我该如何实现这种行为呢?如何避免返回逻辑视图名称并返回String值,然后将其检索到 .done()函数中?
答案 0 :(得分:1)
只需返回要传递给前端的对象,并使用@RestController
注释或带@ResponseBody
的控制器方法注释控制器。
答案 1 :(得分:0)
您似乎想要解析json
,因此最好使用@RestController
而不是@Controller
,这告诉Spring您正在进行RESTful服务调用。
您的控制器,我会像这样重写:
@RequestMapping(value = "salvaAppuntiMinisteriale", method=RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity< Twp1007Progetto > salvaAppuntiMinisteriale(@RequestBody Twp1007Progetto progetto ) throws Exception {
//your logic here
return new ResponseEntity<>(progetto, HttpStatus.OK));
}