2011-08-10 120 views
7

我正在一個struts2項目,我有3個html選擇控件每個依賴於以前的選擇。假設第一個選擇是針對國家,第二個針對國家,第三個針對城市。狀態選擇中的選項列表將被過濾以僅顯示該國家的狀態等。由於其他限制,我使用的是基本的html選擇控件而不是struts2。下面是我當前如何填充選擇一個樣本:struts2:更新第二選擇基於第一選擇值使用javascript和jquery

<select id="stateSelect" name="selectedState"> 
<s:iterator value="#session['myModel'].states" status="itr"> 
    <option value="<s:property value="code"/>"> 
     <s:property value="label"/> 
</option> 
</s:iterator> 
</select> 

我認爲我需要做的是onchange事件做一個AJAX調用來檢索基礎上,選擇了「全國」,「國家」的名單。問題是:
1.我該如何使用jQuery來做這個ajax調用?
2.我需要通過什麼作爲ajax調用的URL?只是行動名稱?
3.我如何解析結果?從java代碼中,我可以返回具有「代碼」和「標籤」以及其他屬性的「狀態」對象列表。我該如何解析JavaScript中的這個列表併爲select標籤生成適當的選項?

+2

我以前做過這個。我會做jonathan建議使用struts2-json-plugin(它非常易於使用),使用它的動作會返回一個json字符串。如果你使用chrome,你會在屏幕上看到它,用firefox你會看到它使用螢火蟲。有了json,你可能會使用jQuery的$ .getJSON()這個頁面上的cat示例在啓動時幫助了我很多:http://api.jquery.com/jQuery.getJSON/您可以將它複製到您自己的頁面中,它將使用json和cat圖像離開閃爍的網站,讓你使用json而不需要服務器。 – Quaternion

回答

2
<select id="stateSelect" name="selectedState" onchange="loadCities(this.value)"> 
<s:iterator value="#session['myModel'].states" status="itr"> 
    <option value="<s:property value="code"/>"> 
     <s:property value="label"/> 
</option> 
</s:iterator> 
</select> 

<select id="citySelect" name="selectedCity" > 
</select> 

JQuery的

function loadCities(value){ 

     $("#citySelect").get(0).options.length = 0; 
     $("#citySelect").get(0).options[0] = new Option("Loading cities", "-1"); 

     $.ajax({ 
      type: "POST", 
      url: "MyStrutsActionToGetCities", 
      data: "{stateID:" + value+ "}", 
      contentType: "application/json; charset=utf-8", 
      dataType: "json", 
      success: function(msg) { 
       $("#citySelect").get(0).options.length = 0; 
       $("#citySelect").get(0).options[0] = new Option("Select city", "-1"); 

       $.each(msg.d, function(index, item) { 
        $("#citySelect").get(0).options[$("#citySelect").get(0).options.length] = new Option(item.Display, item.Value); 
       }); 
      }, 
      error: function() { 
       $("#citySelect").get(0).options.length = 0; 
       alert("Failed to load cities"); 
      } 
     }); 
} 

this tutorial

更新摘自:本例使用基於選擇的狀態來加載城市名單。你可以做類似的事情來加載國家選擇的狀態列表。另外here is a link描述了沒有使用任何插件的struts的Ajax請求/響應

2

通常情況下,使用最新版本的Struts2附帶的Struts2 JSON plugin。要在JSP中與jQuery交互,您需要使用s:url爲您的JSON動作創建一個URL,然後使用jQuery的.getJSON()或.load()來調用它。

但是,如果您的下拉選項確實不那麼複雜,請勿過度設計。在初始頁面加載時使用s:iterator可以更容易地呈現它們,並且在下拉框中使用.change()可以在選定組件之間移動數據,或者增強表單提交的其中一個選擇框的名稱屬性。

相關問題