我仍然需要一些动态选择列表的帮助。
我有sript:
function getMains(element) {
var subjectgroup = element.value;
var select_element;
select_element = '#mains';
$(select_element).html('');
$(select_element).append($("<option></option>").attr("value","none").html(""));
// $(select_element).append($("<option></option>").attr("value","all").html(""));
if (element.value==''||element.value=='none'||element.value=='all')
return;
$.ajax({
type: 'GET',
url: 'getmainsubjects.html',
dataType: 'json',
data: ({id:data}),
success: function(data) {
$.each(function(data) {
if (!subjectgroup) {
$(select_element).append($(" <option>").attr("value",data.id,"items",data).html(data.description));
} else {
$(select_element).append($("<option>").attr("value",data.id,"items",data).html(data.description));
}
});
},
error: function(data) {
//alert("This failed!");
}
});
}
$('select#subjectgroups').ready(function(){
$("select#subjectgroups").find("option").each(function(i) {
if ($(this).val()!='all'&&$(this).val()!='none') {
$(this).append( " " + $(this).val() );
}
});
});
$('select#mains').ready(function(){
$("select#mains").find("option").each(function(i) {
if ($(this).val()!='all'&&$(this).val()!='none') {
$(this).append( " " + $(this).val() );
}
});
});
方法:
@RequestMapping(method = RequestMethod.GET, params="id", value = "/getmainsubjects")
@ResponseBody
public String getMainSubjects( @RequestParam("id") int id) {
List<MainSubjectsSimple> mains = database.getMainSubjectsSimple(id, Localization.getLanguage());
//System.out.println(mains.size());
HashMap hm = new HashMap();
for (MainSubjectsSimple mss: mains) {
try {
hm.put("id",mss.getId());
hm.put("description", mss.getDescription());
} catch (NoSuchMessageException e) {
//hm.add(Integer.valueOf(mss.getId().toString(), translate(mss.getTranslationCode(),new Locale("fi")));
}
}
String json = null;
String _json = null;
try {
_json = HtmlEntityEncoder.encode(JsonUtils.javaToStr(hm));
} catch (Exception e) {
}
return _json;
}
我认为我没有循环正确的价值观。应根据其他选择列表填充主要选择列表,以便对象的id是标签的值和描述。现在调用脚本编写的url只返回第一个对象json,而不是所有对象,并且对象不会显示在主电源选择列表中。
答案 0 :(得分:0)
您将相同的密钥一遍又一遍地添加到地图 hm :
HashMap hm = new HashMap();
for (MainSubjectsSimple mss: mains) { try { hm.put("id",mss.getId()); hm.put("description", mss.getDescription()); } catch (NoSuchMessageException e) { //hm.add(Integer.valueOf(mss.getId().toString(),
translate(mss.getTranslationCode(),new Locale(“fi”))); } }
您需要为电源中的每个条目使用不同的键,或使用地图的集合(例如ArrayList)。后者的一个例子:
List hms = new ArrayList();
for (MainSubjectsSimple mss: mains) {
try {
HashMap hm = new HashMap();
hm.put("id",mss.getId());
hm.put("description", mss.getDescription());
hms.add(hm);
} catch (NoSuchMessageException e) {
//hm.add(Integer.valueOf(mss.getId().toString(), translate(mss.getTranslationCode(),new Locale("fi")));
}
}
...
try {
_json = HtmlEntityEncoder.encode(JsonUtils.javaToStr(hms));
} catch (Exception e) {
}
我不熟悉您正在使用的utils(JsonUtils),所以这可能不会直接起作用,但原则是相同的。