如何在struts2中进行依赖自动完成?

时间:2012-02-20 13:30:48

标签: jsp struts2

我在我的项目中使用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 标记中执行相同的操作。

所以,任何人帮我提出任何想法来完成这项任务。在此先感谢!。

1 个答案:

答案 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);
            }
            });
            });
    }