2012-04-27 129 views
2

我想在選擇國家後顯示國家。STRUTS2和AJAX - 選擇國家,填寫國家

JSP

 <s:select label="COUNTRY" name="summaryData.addressCountry" id="addForm_countryCode" 
             list="loyaltyCountryMap" tabindex="" headerKey="US" headerValue="United States" 
             listKey="key" listValue="value.countryName" 
             onchange="getStateList('#addForm_countryCode')"> 

     </s:select> 

<s:select label="STATE" name="summaryData.addressCityCode" headerValue="-Select-" headerKey="-Select-" list="stateList" required="true" cssClass="storedPaymentInput_size1 required" id="stateList"/> 

JAVASCRIPT:

function getStateList() { 
     var countryCode = $('#addForm_countryCode").val(); 
     $.ajax({ 
      url: 'ajaxStateList', 
      dataType: 'html', 
      data: { countryCode : countryCode}, 
      success: function(data) { 
       $('#stateList').html(data); 
      } 
     }); 
    } 

struts.xml中

 <action name="ajaxStateList" class="actions.AjaxStateList"> 
     <result name="success"/> 
</action> 

操作類

private List<String> stateList; 

    private String countryCode; 

    public String getCountryCode() { 
     return countryCode; 
    } 

    public void setCountryCode(String countryCode) { 
     this.countryCode = countryCode; 
    } 

    public List<String> getStateList() { 
     return stateList; 
    } 

    public void setStateList(List<String> stateList) { 
     this.stateList = stateList; 
    } 

    public String execute() { 

     LoyaltyStateProvinces.getInstance(); 

     stateList = StateProvinces.getAllStateProvinceByCountryCode(countryCode); 

     for(StateProvince state: states){ 
      stateList.add(state.getStateProvinceCode()); 
     } 


     return SUCCESS; 
    } 

如何使用AJAX + Struts2工作?

+0

+1僅僅用於使用jQuery而不使用那些可憐的ajax標記庫。 – Quaternion 2012-04-30 08:37:08

回答

2

請參閱struts2-json-plugin。讓你的動作返回一個json結果類型(通過這個插件)。你的行動班可以保持不變。

一旦您創建並測試了您的操作返回JSON(只需在瀏覽器中輸入url)。那麼你需要一些javaScript。我看到你正在使用jQuerys $ .ajax方法......我更喜歡$.getJSON,它做的是相同的,但是採用json格式的數據。

下面是我自己的代碼一些JS:

  function punch(){ 
       $.getJSON("<s:url namespace="/timeclock/json" action="punch"/>", 
       { 
        badge: $("#input_badge").val() 
       }, 
       function(data) { 
        $("#input_badge").val(""); 
        $("#emp_name").text(data.name); 
        $("#emp_time").text(data.punch); 
        $("#notification").fadeIn("slow", hide); 
       }); 
       return false; 
      } 

你會發現三個參數:拳被分配爲始終與sturts2 URL標記構建最佳呼叫的網址。其次是發送到動作的參數,在這種情況下,「徽章」被設置爲在文本字段中以「input_badge」的id爲始,然後發送到服務器。最後,當回調成功時調用的函數,您可以看到諸如「name」,「punch」等參數被返回。