STRUTS2和AJAX - 选择国家/地区,填写各州

时间:2012-04-27 13:02:04

标签: ajax struts2

我想在选择国家后显示各州。

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使其工作?

1 个答案:

答案 0 :(得分:2)

struts2-json-plugin。让你的动作返回一个json结果类型(通过这个插件)。您的动作类可以保持基本不变。

一旦您创建并测试了您的操作返回JSON(只需在浏览器中输入网址)。那你需要一些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;
            }

你会注意到三个参数:Fist是调用的url,它总是最好用sturts2 url标签构建。其次是发送给动作的参数,在这种情况下,“badge”被设置为文本字段中具有id“input_badge”的内容,然后被发送到服务器。最后在回调成功时调用的函数,可以看到返回“name”,“punch”等参数。