【问题标题】:iterating through java collection using jQuery使用 jQuery 遍历 java 集合
【发布时间】:2010-07-05 12:41:05
【问题描述】:

我从这个对象开始,

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 映射。这可能吗?

提前致谢。

【问题讨论】:

标签: java jquery jsp


【解决方案1】:

现在你传入items,它是一个只有两个键/值对的对象,所以$.each() 只运行了两次迭代。对于这些迭代,this.displaythis.value 指的是整个数组。

一种选择是简单地将displayArrayvalueArray 传递给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] );
    });
};

【讨论】:

  • 好的,谢谢;我希望有一种机制只为 displayArray 和 valueArray 使用一个数据结构......?
  • @batthink - 当然。您可以返回原始代码,并迭代 items.display 而不是 items。我会用这个更新我的答案。另一种解决方案是创建一个对象数组,然后迭代该数组,而不是创建一个包含数组的对象。
【解决方案2】:

我认为您的 java 代码应该提供对象的 json 版本。然后,您可以将整个 myCombiTOList 插入到您的 jsp 中,或者在更改函数中获取一个带有 ajax 请求的单个 myCombiTO 对象。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-11-17
    • 2014-08-18
    • 2014-04-11
    • 2017-11-20
    • 1970-01-01
    • 1970-01-01
    • 2018-02-19
    相关资源
    最近更新 更多