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メソッドを使用しているようです...同じことを行うがjson形式のデータを想定する$.getJSONを好みます。

これが私自身のコードからのいくつかの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;
            }

3つのパラメータに気付くでしょう。Fistは呼び出しのURLであり、常にsturts2urlタグを使用して構築するのが最適です。2つ目は、アクションに送信されるパラメーターです。この場合、「バッジ」は、IDが「input_badge」のテキストフィールドにあったものに設定されてから、サーバーに送信されます。最後に、コールバックが成功したときに呼び出される関数は、「name」、「punch」などのパラメーターが返されることを確認できます。

于 2012-04-30T08:33:54.067 に答える