我有一个JSP页面,上面有一些javascript:
function enviar(tableID) {
var table = document.getElementById(tableID);
var array= new Array();
for (var i = 1;i<table.rows.length; i++){
var row = table.rows[i];
for (var j = 0; j < row.cells.length; j++){
alert("added to array: "+row.cells[j].getElementsByTagName('INPUT')[0].value);
array.push(row.cells[j].getElementsByTagName('INPUT')[0].value);
}
}
var ajaxRequest;
try{
// Opera 8.0+, Firefox, Safari
ajaxRequest = new XMLHttpRequest();
} catch (e){
// Internet Explorer Browsers
try{
ajaxRequest = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
try{
ajaxRequest = new ActiveXObject("Microsoft.XMLHTTP");
} catch (e){
// Something went wrong
alert("Your browser broke!");
return false;
}
}
}
ajaxRequest.open('POST', 'proyecto/saveRecompensas');
ajaxRequest.send('array='+array);
}
还有一个控制器,有一个方法可以接收请愿书和我发送的数组以及请愿书:
@RequestMapping ("/proyecto/saveRecompensas")
public String saveRecompensas(@RequestParam String[] array){
System.out.println("saveRecompensas method");
return null;
}
问题是,从不调用方法中的sysout。这样,当执行Javascript时,服务器控制台会这样说:
WARN : org.springframework.web.servlet.PageNotFound - No mapping found for HTTP request with URI [/myapp/proyecto/proyecto/saveRecompensas] in DispatcherServlet with name 'appServlet'
为什么双重&#34; proyecto&#34;在URI?我应该使用哪个URL到服务器才能收到请愿?我发送参数好吗?
谢谢。
编辑:
我的调度员:
<servlet>
<servlet-name>appServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/spring/appServlet/servlet-context.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>appServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
答案 0 :(得分:0)
我的猜测是当前的URL上下文是:/myapp/proyecto
所以如果你这样做:
ajaxRequest.open('POST', 'proyecto/saveRecompensas');
它将基于当前的URL上下文,再次添加proyecto。
答案 1 :(得分:0)
您最好指定后缀或子路径,而不仅仅是根路径。
servlet映射:
<servlet-mapping>
<servlet-name>appServlet</servlet-name>
<url-pattern>/action/*</url-pattern>
</servlet-mapping>
动作:
@RequestMapping ("/proyecto/saveRecompensas")
public String saveRecompensas(@RequestParam String[] array){
System.out.println("saveRecompensas method");
return null;
}
URL:
ajaxRequest.open('POST', 'action/proyecto/saveRecompensas');
servlet映射:
<servlet-mapping>
<servlet-name>appServlet</servlet-name>
<url-pattern>*.action</url-pattern>
</servlet-mapping>
动作:
@RequestMapping ("/proyecto/saveRecompensas")
public String saveRecompensas(@RequestParam String[] array){
System.out.println("saveRecompensas method");
return null;
}
URL:
ajaxRequest.open('POST', 'proyecto/saveRecompensas.action');
@Edit在控制器方法中获取数组参数:
:
e.g。
public Map<String, Object> getObjects(@RequestParam(required = true, value = "ids[]") Integer[] ids) {
}
在js:
e.g。
"ids[]":[1,2,3]
答案 2 :(得分:0)
只需为您的网址添加后缀',如下面的web.xml文件
所示<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
从ajax调用控制器方法,如下面的代码
$.ajax({
url:"your_url.do",
type: "POST",
data: {'somename':data},
success: function(data)
{
console.log(data);
}
});
它会起作用。