问题描述
||
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\");
}
任何帮助将不胜感激
提前致谢
解决方法
在我的测试中,您不能在表格名称中使用\'[\'等。尽管它在POST请求中将其发送(转义为URL),但至少PHP不会接受转义或未转义的形式。
更改此行:
hiddenField.setAttribute(\"name\",\"solarPanelIds[\"+i+\"]\");
至
hiddenField.setAttribute(\"name\",\"solarPanelIds\"+i);
有效(只要您更新服务器端变量)。
如果您不希望弹出框,可以考虑使用通过隐藏的iframe异步提交表单的技术。