Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 无法将对象从控制器获取到JSP_Javascript_Jsp_Spring Mvc_Dojo - Fatal编程技术网

Javascript 无法将对象从控制器获取到JSP

Javascript 无法将对象从控制器获取到JSP,javascript,jsp,spring-mvc,dojo,Javascript,Jsp,Spring Mvc,Dojo,我试图将一个对象从Spring控制器传递到我的JSP页面,并计划使用JSTL在JSP中迭代该对象。但是我无法在JSP中打印对象。从控制器端,成功发送值。我认为Javascript或JSP中有问题 请求你的宝贵意见。请找到下面的代码 控制器: @RequestMapping("/changehistory/getSearchHistory.htm") public ModelAndView getSearchHistory(@ModelAttribute(HISTORY_CRITERIA) His

我试图将一个对象从Spring控制器传递到我的JSP页面,并计划使用JSTL在JSP中迭代该对象。但是我无法在JSP中打印对象。从控制器端,成功发送值。我认为Javascript或JSP中有问题

请求你的宝贵意见。请找到下面的代码

控制器:

@RequestMapping("/changehistory/getSearchHistory.htm")
public ModelAndView getSearchHistory(@ModelAttribute(HISTORY_CRITERIA) HistoryCriteria historyCriteria,ModelMap model) {
     ModelAndView mav = new ModelAndView("changehistory/changeHistory_new");
     List<HistoryCriteriaResult> result=new ArrayList<HistoryCriteriaResult>();              
    result=changeHistoryService.getHistory(historyCriteria);
    mav.addObject("historyCriteriaResult", result);
    return mav;
} 
@RequestMapping(“/changehistory/getSearchHistory.htm”)
公共模型和查看getSearchHistory(@ModelAttribute(HISTORY_CRITERIA)HistoryCriteria HistoryCriteria,ModelMap模型){
ModelAndView mav=新的ModelAndView(“更改历史记录/更改历史记录_新”);
列表结果=新建ArrayList();
结果=changeHistoryService.getHistory(historyCriteria);
mav.addObject(“historyCriteriaResult”,结果);
返回mav;
} 
JSP:


  • id=“RP.changeHist” name=“changeHist”> ${HCList.code} ${HCList.name}
JS:

RP.getSearchHistory=function(){
dojo.xhrPost({
url:“/RMT/rateplan/getSearchHistory.htm?”,
超时:100000,
加载:函数(内容){
var iList=内容['result'],i;
HCList.options.length=0;
对于(i=0;i
您无法访问JavaScript代码中的Java变量
HCList
,您有两个选项:

首先,您可以在另一个JSP页面中返回结果,在这种情况下,您不需要执行
getSearchHistory
Ajax调用,您可以通过在控制器类中定义另一个控制器方法来执行此操作,检查表单提交示例,检查控制器类是如何使用两个方法实现的,每个方法对应一个唯一的JSP文件

其次,如果希望在AJAX请求中返回
historyCriteriaResult
,则必须将其转换为JSON格式,因此需要将Java方法更改为如下内容:

 @RequestMapping("/changehistory/getSearchHistory.htm")
 public @ResponseBody List<HistoryCriteriaResult> getSearchHistory(@ModelAttribute(HISTORY_CRITERIA) HistoryCriteria historyCriteria) {
     List<HistoryCriteriaResult> result=new ArrayList<HistoryCriteriaResult>();              
     result=changeHistoryService.getHistory(historyCriteria);
     return result;
 }
handleAs: "json",    // This force the response to be treated as JSON
load : function(content) {
         alert(content.HistoryCriteriaResultList[0].code);
         alert(content.HistoryCriteriaResultList[0].name);
         .
         .
         // or append it to any div you want
}

注意:如果您使用的是Spring 3或更高版本,则需要向项目类路径添加JSON解析器

是否包含在jsp中?是的,我已经包含了它。我使用了第一个选项并修改了控制器,以便在另一个jsp页面中查看返回结果,如下所示。public ModelAndView getSearchHistory(@ModelAttribute(HISTORY_CRITERIA)HistoryCriteria HistoryCriteria,ModelMap model){ModelAndView mav=new ModelAndView(“changehistory/changeHistoryResults”);List result=new ArrayList();result=changeHistoryService.getHistory(HistoryCriteria);mav.addObject(“historyCriteriaResult”,结果);返回mav;}我试着像下面那样放入新的JSP,但它不起作用。我遗漏了什么吗?我不是说一个新的JSP将
forEach
循环移动到另一个JSP文件中,并将其包含在原始JSP文件中,我的意思是定义一个返回的新JSP处理检索
历史准则的请求
,请检查答案,我已经更新了
 @RequestMapping("/changehistory/getSearchHistory.htm")
 public @ResponseBody List<HistoryCriteriaResult> getSearchHistory(@ModelAttribute(HISTORY_CRITERIA) HistoryCriteria historyCriteria) {
     List<HistoryCriteriaResult> result=new ArrayList<HistoryCriteriaResult>();              
     result=changeHistoryService.getHistory(historyCriteria);
     return result;
 }
handleAs: "json",    // This force the response to be treated as JSON
load : function(content) {
         alert(content.HistoryCriteriaResultList[0].code);
         alert(content.HistoryCriteriaResultList[0].name);
         .
         .
         // or append it to any div you want
}