我在我的项目中使用Struts2。我必须在jsp中为State和City使用两个 autocompleter 控件(struts2_tag)。
我已从表中加载状态。当我在jsp中选择stateName时,它应该从数据库中检查依赖于State的cityName并加载到City autocompleter标记中。
无法从自动填充程序的onchange方法调用操作类,因为它不起作用。
我当前正在使用Ajax框中的代码 Jsp:(正常工作)
<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 标记中执行相同的操作。
所以,任何人帮我提出任何想法来完成这项任务。在此先感谢!。
答案 0 :(得分:1)
您需要定义一个函数,您可以在第一个下拉列表的particulat事件中调用该函数。 基于所选值,将该值传递给动作类,创建一个列表并使用JSON()用户S2-Json插件传递结果)。这是函数的概要
function searchDistrict()
{
dropdownreset(document.getElementById("district"));
var selectedState = document.getElementById("stateList");
var statedata = selectedState.options[selectedState.selectedIndex].value;
var formInput='state='+statedata;
$.getJSON('search/searchDistrict',formInput,function(data) {
$('.result').html('' + data.districts + '');
$.each(data.districts,function(index, value){
var districtid = document.getElementById("district_");
var option=new Option(value,value);
try{
districtid.add(option);
}
catch(e){
districtid.appendChild(option);
}
});
});
}