2010-07-05 99 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对象。