代码之家  ›  专栏  ›  技术社区  ›  NimChimpsky

使用jQuery迭代通过Java集合

  •  2
  • NimChimpsky  · 技术社区  · 14 年前

    我从这个物体开始,

    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对象时遇到问题。理想情况下,我希望使用JavaQuery使用键/值对来引用Java映射。这有可能吗?

    事先谢谢。

    2 回复  |  直到 14 年前
        1
  •  1
  •   user113716    14 年前

    现在你进来了 items 它是一个只有两个键/值对的对象,因此 $.each() 只运行两次迭代。对于这些迭代, this.display this.value 引用整个数组。

    一种选择是简单地通过 displayArray valueArray 在向 populateSelect() ,并迭代这些:

    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] );
        });
    };
    
        2
  •  1
  •   Maurice Perry    14 年前

    我认为Java代码应该提供一个对象的JSON版本。然后,您可以在JSP中插入整个mycombitolist,或者在change函数中使用Ajax请求获取单个mycombito对象。