2012-02-20 16 views
0

我在我的項目中使用Struts2。我必須使用jsp中的兩個autocompleter控件(struts2_tag)供州和市使用。如何在struts2中執行depedent autocompleter?

我已經從表中加載狀態。當我在jsp中選擇stateName時,它應該檢查從數據庫中依賴狀態的cityName並加載到City autocompleter標記中。

沒有想法從onchange方法調用動作類自動完成器 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標籤。

那麼,任何人都可以幫助我給任何想法來完成這項任務。提前致謝!。

回答

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); 
      } 
      }); 
      }); 
    } 
+0

謝謝!!。我嘗試了正常的選擇框並加載到依賴選擇框(如狀態>>城市)。但是我想爲標籤做。所以它不支持onchange屬性中的onclick事件。如何處理這個動作? – shiva 2012-02-21 02:14:00