2013-09-08 3 views
0

Я пытаюсь передать объект из Spring Controller на мою страницу JSP и планировать итерацию объекта в JSP с помощью JSTL. Но я не могу напечатать объект в JSP. Со стороны контроллера значение отправляется успешно. Я думаю, что что-то не так в Javascript или JSP.Невозможно получить объект от контроллера до JSP

Запросите ценные данные. Pls найти ниже код,

Контроллер:

@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); 
     } 
    }); 
} 
+0

вы в том числе <% @ TagLib URI = "HTTP: // java.sun.com/jsp/jstl/core "prefix =" c "%> в вашем jsp? – ikumen

+0

Да, я включил его. – Stalwart

ответ

0

Вы не можете получить доступ к Java переменной HCList внутри кода JavaScript, у вас есть два варианта:

Сначала вы можете вернуть результат на другую страницу JSP, и в этом случае вам не нужно делать getSearchHistory Ajax-вызов, вы можете сделать это, указав другой метод контроллера в своем классе контроллера, проверьте пример отправки формы here, проверьте, как класс контроллера реализован с использованием двух методов, каждый из которых соответствует уникальному файлу JSP.

Во-вторых, если вы хотите вернуть historyCriteriaResult в запросе AJAX, вы должны преобразовать его в формат 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 вам проецировать

классам
+0

Я взял первый вариант и модифицировал контроллер, чтобы увидеть результат возврата на другой странице JSP следующим образом. public ModelAndView getSearchHistory (@ModelAttribute (HISTORY_CRITERIA) HistoryCriteria historyCriteria, модель ModelMap) { ModelAndView mav = new ModelAndView ("changehistory/changeHistoryResults"); Список result = new ArrayList (); result = changeHistoryService.getHistory (historyCriteria); mav.addObject ("historyCriteriaResult", результат); return mav; } – Stalwart

+0

Отличный .. это сработало? – fujy

+0

Я попытался вставить новый JSP, как показано ниже, но это не сработало. Я что-то упускаю?

\t \t \t \t \t \t \t \t \t \t \t \t \t \t \t
Stalwart

Смежные вопросы