【发布时间】:2012-03-10 20:13:29
【问题描述】:
我在我的项目中使用 Struts2。我必须在 jsp 中为州和城市使用两个 autocompleter 控件(struts2_tag)。
我已经从表中加载了状态。当我在 jsp 中选择 stateName 时,它应该从数据库中检查依赖于 State 的 cityName 并加载到 City 自动完成器标签中。
不知道从自动完成器的onchange方法调用动作类,因为它不起作用。
我当前在 Jsp 中使用带有 Ajax 的框的工作代码:(正常工作)
<s:select name="stateName" list="stateList" onchange="loadCity(this.value)" listKey="stateId" listValue="stateName" headerKey="-1" headerValue="Select the State" />
<s:select name="cityName" list="cityList" listKey="cityId" listValue="cityName" headerKey="-1" headerValue="No City Found"/>
function loadCity(id){
var frm = document.detailsAdd;
var URL = "AjaxPopMyCycle.action?stateName="+id;
ajaxEditFunctionCall(URL);
}
function ajaxEditFunctionCall(URL){
var frm = document.detailsAdd;
try{
xmlHttp=new XMLHttpRequest();
}catch (e){
try{
xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
}catch (e){
try{
xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
}catch (e){
alert("Your browser does not support AJAX!");
return false;
}
}
}
xmlHttp.onreadystatechange=function(){
if(xmlHttp.readyState==4){
if (xmlHttp.status == 200) {
if(xmlHttp.responseXML != null ){
showMessage(xmlHttp.responseXML);
}
}
}
}
xmlHttp.open("GET", URL, true);
xmlHttp.send(URL);
}
function showMessage(errorDisplayXML){
var frm = document.surveyAdd;
var checklist=document.detailsAdd.cityName;
checklist.options.length=0;
if(xmlHttp.readyState==4){
if(errorDisplayXML.getElementsByTagName("rootElement")[0]!=null){
var rootElement = errorDisplayXML.getElementsByTagName("rootElement")[0];
var location = rootElement.getElementsByTagName("Message");
var locArr = location[0];
var locArr = " ";
var tempArr;
var tempArr1;
for(var i=0; i<location.length; i++){
tempArr = "";
tempArr1 = "";
locArr = location[i];
tempArr = locArr.getElementsByTagName("cityId")[0].firstChild.nodeValue;
tempArr1 = locArr.getElementsByTagName("cityName")[0].firstChild.nodeValue;
checklist.options[i]= new Option(tempArr1,tempArr);
}
}else{
alert("errorDisplayXML Contains NULL");
}
}
}
我需要在 sx:autocompleter 标签中做同样的事情。
所以,任何人都可以帮我提出任何想法来完成这项任务。提前致谢!
【问题讨论】: