0

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);
        }
  });
 }
4

1 に答える 1

0

HCListJavaScript コード内でJava 変数にアクセスすることはできません。次の 2 つのオプションがあります。

まず、別の JSP ページで結果を返すことができます。この場合、Ajax 呼び出しを行う必要はありません。コントローラー クラスで別のコントローラー メソッドを定義することでこれを行うことができます。ここgetSearchHistoryでフォーム送信の例を確認し、コントローラー クラスがどのように機能するかを確認してください。それぞれ固有の JSP ファイルに対応する 2 つのメソッドで実装

次に、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 パーサーをプロジェクト クラスパスに追加する必要があります。

于 2013-09-08T16:56:52.953 に答える