2010-07-05 106 views
2

我開始與該對象,迭代通過Java集合使用jQuery

public class myTO { 

    private String id; 
    private String name; 
    } 

這是該對象使用

public myCombiTO { 
    private myTO myTO; 

    private List<String> valueList; 
    private List<String> displayList; 
} 

我創建這些對象的列表

List<myCombiTO> myCombiTOList = getMyCombiTOList(); 

我使用此列表來設置jsp頁面屬性

request.setAttribute("myAttrList", myCombiTOList); 

並轉發到jsp頁面。然後我使用jQuery和JSTL從該名單中

<select name="mYSelect" id="mySelect"> 
    <c:forEach var="myVar" items="${myAttrList}"> 
      <option value="${myVar.myTO.id}" > 
       <c:out value="${myVar.myTO.name}" /> 
      </option> 
    </c:forEach>  
</select> 

我的問題是向下填充下降我想填充第二個下拉使用jQuery的價值觀從mycombiTO.getValueList()。到目前爲止,我有這

$("#mySelect").change(function(){ 
     var myJSList = ${myAttrList}; 
     var chosenGroup = $("#mySelect").val(); 
     var valueArray = myJSList.get(chosenGroup).valueList; 
     var displayArray = myJSList.get(chosenGroup).displayList; 
     var items = {'display':[displayArray], 'value':[valueArray]}; 

     //now populate drop downs 

     $.populateSelect($('#myselect').get(0), items); 

    }); 

jQuery.populateSelect = function(element,items) { 
    $.each(items, function() { 
      element.options[element.options.length] = new Option(this.display,this.value); 
      }); 
}; 

但它不工作,請幫助。我無法創建基於兩個數組的javascript對象。理想情況下,我想使用鍵/值對從jquery引用java映射。這可能嗎 ?

在此先感謝。

+0

相關:http://stackoverflow.com/questions/2263996/populating-child-dropdownlists-in-jsp-servlet – BalusC 2010-07-05 13:49:06

回答

1

現在你正在通過items這是一個只有兩個鍵/值對的對象,所以$.each()只運行兩次迭代。對於這些迭代,this.displaythis.value指的是整個陣列。

一種選擇是簡單地通過在displayArrayvalueArraypopulateSelect(),並遍歷這些:

jQuery.populateSelect = function(element,displayArray,valueArray) { 
    $.each(displayArray, function(i,val) { 
     element.options[element.options.length] = new Option(displayArray[i] ,valueArray[i]); 
    }); 
}; 

再回到您的原代碼,你也可以這樣做:

jQuery.populateSelect = function(element,items) { 
    $.each(items.display, function(i,val) { 
     element.options[element.options.length] = new Option(items.display[i] ,items.value[i]); 
    }); 
}; 
+0

是的好,謝謝;我希望有一種機制只使用displayArray和valueArray的一個數據結構...? – NimChimpsky 2010-07-05 13:16:04

+0

@batthink - 當然。你可以回到你原來的代碼,並遍歷'items.display'而不是'items'。我會更新我的答案。另一種解決方案是創建一個對象數組,並迭代該數組而不是創建一個內部數組的對象。 – user113716 2010-07-05 13:41:51

1

我認爲你的java代碼應該提供你的對象的json版本。然後,您可以將整個myCombiTOList插入到您的jsp中,或者在更改函數中獲取帶有ajax請求的單個myCombiTO對象。