function openWindowWithGraph(selectedItems){
var i=0;
var form = document.createElement("form");
form.setAttribute("method", "post");
form.setAttribute("action", "http://localhost:8080/cmonitor/app/solarPlant/showChart");
form.setAttribute("target", "formresult");
alert(selectedItems[0].solarPanel.id);
for(i=0;i<selectedItems.length;i++){
var hiddenField = document.createElement("input");
hiddenField.setAttribute("name", "solarPanelIds["+i+"]");
hiddenField.setAttribute("value", selectedItems[i].solarPanel.id);
form.appendChild(hiddenField);
}
document.body.appendChild(form);
window.open('','formresult','width=1000,height=1000,toolbar=no ');
alert("hello");
form.submit();
}
这是我的弹簧控制器
@RequestMapping(value="/showChart",method=RequestMethod.POST)
public ModelAndView showChart(@RequestParam(required=false) Long[] selectedItemIds){
System.out.println(selectedItemIds); //getting null in controller
return new ModelAndView("noHeader/solarPlant/chart");
}
任何形式的帮助将不胜感激 在此先感谢
答案 0 :(得分:0)
在我的测试中,您不能在表单名称中使用'['或类似名称。虽然它在POST请求中发送它(URL-escaped),但至少PHP不接受转义或未转义的表单。
更改此行:
hiddenField.setAttribute("name", "solarPanelIds["+i+"]");
到
hiddenField.setAttribute("name", "solarPanelIds"+i);
有效(只要您更新服务器端变量)。
您可能还希望考虑使用通过隐藏的iframe异步提交表单的技术,如果您不想使用弹出窗口。