2

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

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

4

1 回答 1

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;
            }

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

于 2012-04-30T08:33:54.067 回答