3

HTMLページには、次のようなチェックボックスがあります。

<input name="serviceareas" type="checkbox" id="cb1" value="1">
<input name="serviceareas" type="checkbox" id="cb2" value="2">
...

jqueryの助けを借りて、チェックされたすべてのチェックボックスの値のjavascript配列を作成します

getSelectedValues : function() {
            var allVals = [];
            $('#checkboxTable :checked').each(function() {
                   allVals.push($(this).val());
              });
            //alert("allVals: "+allVals);

            return allVals;
        }

、Struts 2 アクションに送信します。たとえば、firebug リクエストでは、次のように表示されます:-

サービスエリア 21,26,30

アクションで私はそれをにマッピングしようとしました

private List<String> serviceareas = new ArrayList<String>();

しかし、代わりに SOP はそれをオブジェクトとして出力しており、それを Java リストにキャストすることはできません。

public class CreateEventAction extends ActionSupport {

    private List<String> serviceareas = new ArrayList<String>();

    public List<String> getServiceareas() {
        return serviceareas;
    }
    public void setServiceareas(List<String> serviceareas) {
        this.serviceareas = serviceareas;
    }

    @Override
    public String execute() throws Exception {

        if(this.serviceareas != null) {

                for (String serviceAreaId : this.serviceareas) {

                        System.out.println("String :"+serviceAreaId);

                }

            }

        return SUCCESS;
    }

出力: 文字列:21,26,30

助けてください。前もって感謝します。

4

3 に答える 3

2

アクションへの送信が機能すると仮定して、次のようにパラメーターを作成してみてください。

serviceareas=21&serviceareas=26&serviceareas=30
于 2012-11-01T10:53:32.993 に答える
1

Aleksandr Mの答えはうまくいくはずです。実装方法をより明確にするために、この回答を投稿しています。

JavaScript 配列を送信する代わりに、文字列を送信します。

getSelectedValues : function() {
    var allVals = '';
    $('#checkboxTable :checked').each(function() {
         allVals += "serviceareas="+$(this).val()+"&";  //prepare the string
    });
    if(allVals.length>0){
         allVals = allVals.substring(0,allVals.length-1); //remove last '&'
    }    
    return allVals; //submit this string as parameter
}
于 2012-11-01T12:28:51.110 に答える
0

これは不可能だと思います。通常呼び出すサーブレットにチェック ボックスまたは複数のリストを持つフォームを送信するとgetPrameterValues()、このメソッドは内部でカンマ区切りの文字列を配列に変換し、文字列の配列として返します。しかし、ここでは、コンマ区切りの文字列とアクションサーブレット呼び出しを相互に呼び出して送信するだけなgetPrameter()ので、そこに刺されて、リストを1つの文字列で初期化します。それを行うには、チェックボックス グループを持つフォームを送信する必要があります。

ここで、このカンマ区切りの文字列をアクションクラスで分割することで簡単に修正できます....または、actionFor( struts 1.2) でそれぞれのプロパティを使用して送信する方法を見つける必要があります。Struts 2 の簡単な参照をさせてください。とにかく、現在のアプローチは間違っています。

于 2012-11-01T09:33:40.953 に答える