【问题标题】:Unable to get object from Controller to JSP无法从 Controller 获取对象到 JSP
【发布时间】:2013-09-08 11:50:57
【问题描述】:

我正在尝试将一个对象从 Spring Controller 传递到我的 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;
} 

JSP:

<div class="ItemListNavBoxLeft" style="margin-top: -2px; padding-left: 20px;"     
id="accordianRefreshBtn">

<div class="OrangeFB" style="width: auto; " onclick="RP.getSearchHistory()">
<div class="Q2"><div class="Q8"><div class="Q4"><div class="Q6"><div class="Q1"><div   
class="Q3"><div class="Q7"><div class="Q9"><div class="Q5">
                        &nbsp;<spring:message code='label.button.history'/>&nbsp;
            </div></div></div></div></div></div></div></div></div>
</div>
        </div>

 <div id="changeHistorydiv" style="display:<c:choose><c:when 
 test='${fn:length(historyCriteriaResult) > }'>block</c:when>   
 <c:otherwise>none</c:otherwise></c:choose>;">
            <ul class="FormBody" style="padding-left:150px;">
                <li class="FormFieldTitle"></li>


                        id="RP.changeHist"
                        name="changeHist"> 

                        <c:forEach items="${historyCriteriaResult}" 
  var="HCList">
                                  ${HCList.code}
                              ${HCList.name}                            
                        </c:forEach>


            </ul>
        </div>

JS:

 RP.getSearchHistory = function() { 
     dojo.xhrPost({
        url : "/RMT/rateplan/getSearchHistory.htm?",
        timeout : 100000,       
        load : function(content) {
             var iList = content['result'], i;
             HCList.options.length = 0;     
             for (i = 0; i < iList.length; i++) {
                 HCList.options[HCList.options.length] = new Option(iList[i].name, iList[i].code);
             }          
        },
        error : function(error) {
            rmt.ErrorMessage.show(error);
        }
  });
 }

【问题讨论】:

  • 你的jsp中是否包含java.sun.com/jsp/jstl/core" prefix="c" %>?
  • 是的,我已经收录了。

标签: javascript jsp spring-mvc dojo


【解决方案1】:

您无法在 JavaScript 代码中访问 Java 变量 HCList,您有两种选择:

首先你可以在另一个 JSP 页面中返回结果,在这种情况下你不需要做 getSearchHistory Ajax 调用,你可以通过在你的控制器类中定义另一个控制器方法来做到这一点,检查一个表单提交示例 @987654321 @,查看控制器类是如何实现的,有两个方法,每个方法对应一个唯一的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;
 }

在你的 JavaScript 方法中,你会像这样解析 JSON 响应:

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 或更高版本,则需要将Jackson JSON Parser 添加到您的项目类路径中

【讨论】:

  • 我取了第一个选项,修改了控制器,在另一个JSP页面看到返回结果如下。 public ModelAndView getSearchHistory(@ModelAttribute(HISTORY_CRITERIA) HistoryCriteria historyCriteria,ModelMap model) { ModelAndView mav = new ModelAndView("changehistory/changeHistoryResults"); List 结果=新 ArrayList();结果=changeHistoryService.getHistory(historyCriteria); mav.addObject("historyCriteriaResult", 结果);返回mav; }
  • 我尝试如下放入新的 JSP,但没有成功。我错过了什么吗?
  • 我的意思不是新的 JSP 将 forEach 循环移动到另一个 JSP 文件中,只是将它包含在原始 JSP 文件中,我的意思是定义一个新的 JSP,它在处理请求时返回以检索historyCritera,请查看答案,我已经更新了
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-29
  • 1970-01-01
  • 2013-11-02
  • 1970-01-01
  • 1970-01-01
  • 2018-12-17
相关资源
最近更新 更多