2012-04-27 61 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”等参数被返回。