需要在动作类中设置的Javascript中使用列表

时间:2013-04-10 14:00:00

标签: struts2 struts2-jquery

我正在 struts2 中创建双选框,当我在第一个选择框中选择国家/地区时,它会在第二个选择框中根据国家/地区获取城市。在第一个选择框的onchange event JS函数中,我传递选定的值并使用ajax发送方法将数据发送到操作,基于我在动作类方法中创建城市列表的事实。那么如何在Javascript中访问列表以便我可以将其设置为第二个选择框?

这是我的代码:

<script>
function loadCity(str) {
  var xmlhttp;
  if (window.XMLHttpRequest) { // code for IE7+, Firefox, Chrome, Opera, Safari
    xmlhttp = new XMLHttpRequest();
  } else { // code for IE6, IE5
    xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
  }
  xmlhttp.open("GET", "loadcity.action?country=" + str, true);
  xmlhttp.send();
  var dat = document.getElementById("cityList").value.toString();
  window.alert(dat);
} 
</script>                                                                                      

<s:select name="country" id="country" list="countryList" label="country" onchange="loadCity(this.value)">
</s:select>
<s:select name="city" label="City" id="cityList" list="cityList">
</s:select> 

这是我的动作类方法:

public String loadcity() {
  cityList = new ArrayList();
  cityList.add("New Delhi");
  cityList.add("Mumbai");
  cityList.add("Moradabad");
  setCityList(cityList);
  return NONE;
}

此处cityList具有正确的值,但当我在我的JS函数中使用它时,它显示为null

1 个答案:

答案 0 :(得分:0)

您没有提供太多信息,但是:从操作方法返回NONE意味着不会再进行任何处理,也不会返回任何结果。

你实际上并没有任何会导致第二个选择框被修改的东西;如果你想推出自己的基于Ajax的双重选择,你需要编写实际的动作结果的JavaScript。有无数的例子说明如何做到这一点。

你可能想要使用JSON结果,顺便说一句,让事情变得更容易。

更简单,请使用S2 jQuery plugin,其中包含example of an Ajax-based double select

IMO在原始JS中手工制作Ajax是徒劳的。