我从这个对象开始,
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 :(得分:1)
现在你传入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] );
});
};
答案 1 :(得分:1)
我认为你的java代码应该提供你对象的json版本。然后,您可以在jsp中插入整个myCombiTOList,或者在更改函数中获取带有ajax请求的单个myCombiTO对象。