选择列表没有填充正确的json数据

时间:2011-08-18 09:27:06

标签: java javascript jquery json spring-mvc

我仍然需要一些动态选择列表的帮助。

我有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,而不是所有对象,并且对象不会显示在主电源选择列表中。

1 个答案:

答案 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),所以这可能不会直接起作用,但原则是相同的。