我正在研究Spring MVC应用程序,我在尝试检索由JQuery AJAX请求传递的String值时遇到了一些问题。
function aggiungiAppunti() {
console.log("INTO aggiungiAppunti()");
//alert("INTO aggiungiAppunti()");
var testoNotaCorrente = $('#notaCorrente').val();
alert("NOTA CORRENTE: " + testoNotaCorrente);
var message = 'Sei sicuro di voler salvare questi appunti?';
mostraConferma(message, function (){
$.ajax({
type : "GET",
url : "aggiungiAppunti",
data : {
'testoNotaCorrente': testoNotaCorrente
},
processData: false,
contentType: false
}).done(function(principal) {
replaceFragment($('#situazioniDocumentali'),principal);
inizializzazioneGestioneValidazione();
}).error(function(error) {
showErrorMessage("errore");
});
});
}
因此,正如您在前面的代码片段中所看到的,我有这个JavaScript函数对 aggiungiAppunti URL执行GET AJAX请求,传递 testoNotaCorrente 文本参数包含 testoNotaCorrente 从textview中检索它的值(我有一个警告,以确保它被正确地定价,并且确实如此)。
然后进入一个控制器类,我声明了这个方法必须处理以前的AJAX请求:
@RequestMapping(value = "/aggiungiAppunti", method = RequestMethod.GET)
public String aggiungiAppunti(HttpServletRequest request, Model model, Locale locale, @RequestParam("testoNotaCorrente") String testoNotaCorrente) throws Exception {
System.out.println("INTO aggiungiAppunti(), testo nota corrente: " + testoNotaCorrente);
return "blablabla";
}
但是当执行AJAX请求时,不执行此方法,并在stacktrace中获取此错误消息:
15:58:48,332 INFO [stdout] (http-localhost/127.0.0.1:8080-1) org.springframework.web.bind.MissingServletRequestParameterException: Required String parameter 'testoNotaCorrente' is not present
为什么呢?怎么了?我错过了什么?我该如何解决这个问题?
答案 0 :(得分:0)
看起来你是从javascript传递变量作为POST变量,但映射Java方法以查找GET变量。
请求网址在服务器访问日志中的含义是什么?
更改您的JavaScript以将变量放入网址。
$.ajax({
type : "GET",
url : "aggiungiAppunti",
data : {
'testoNotaCorrente': testoNotaCorrente
},
processData: false,
contentType: false
})
到
$.ajax({
type : "GET",
url : "aggiungiAppunti?testtoNotaCorrente="+testtoNotacorrente,
processData: false,
contentType: false
})
-Or -
将Java更改为使用POST而不是GET:
@RequestMapping(value = "/aggiungiAppunti", method = RequestMethod.GET)
到
@RequestMapping(value = "/aggiungiAppunti", method = RequestMethod.POST)
答案 1 :(得分:0)
我自己解决了从AJAX请求中删除这些行的问题:
processData: false,
contentType: false
成为:
$.ajax({
type : "GET",
url : "aggiungiAppunti",
data : {
'testoNotaCorrente': testoNotaCorrente
},
contentType:"application/json"
}).done(function(principal) {
replaceFragment($('#situazioniDocumentali'),principal);
inizializzazioneGestioneValidazione();
}).error(function(error) {
showErrorMessage("errore");
});
因此,它可以使用我原来的控制器方法,而无需进行其他更改
答案 2 :(得分:-2)
而不是像这样传递参数:
$.ajax({
type : "GET",
url : "aggiungiAppunti",
data : {
'testoNotaCorrente': testoNotaCorrente
},
processData: false,
contentType: false
}).done(function(principal) {
replaceFragment($('#situazioniDocumentali'),principal);
inizializzazioneGestioneValidazione();
}).error(function(error) {
showErrorMessage("errore");
});
试试这个:
url:“aggiungAppunti?testoNotaCorrente = testoNotaCorrente”