0

私は Dojo 拡張グリッドを使用しており、「myGrid」とマークされた変数はグリッドを参照しています。

function addtocart() {
        $("#additem").click(function(){
            var myGrid = dojo.byId(dataGrid);
            var ids = [];
            var gridRow = myGrid.selection.getSelected();
            $.each( gridRow, function(i, l){
                ids.push(l.id);
            });
            var registcarturl = "${carturl}" + $("#regCart :selected").val();
            $.get(registcarturl, {instanceIds: ids}, function(data) {
                alert(data);
            });
        });
    }

任意の文字列を動的に作成できるため、シリアル化された配列の文字列がどのように見えるかわかりません。例に示すように、jquery get メソッドを使用しようとしています

$.get("test.cgi", { name: "John", time: "2pm" },   function(data){     alert("Data Loaded: " + data);   });

私は次のように機能を変更しました

    function addtocart() {
        $("#additem").click(function(){
            var myGrid = dojo.byId(dataGrid);
            var ids = "[";
            var gridRow = myGrid.selection.getSelected();
            $.each( gridRow, function(i, l){
                ids = ids + "\"" +l.id +"\"";

                if(i != (gridRow.length -1)){
                    ids = ids + ",";
                };

            });
            ids = ids + "]";
            alert(ids);
            var registcarturl = "${carturl}" + $("#regCart :selected").val();
            $.get(registcarturl, {instanceIds: ids}, function(data) {
                alert(data);
            });
        });
    }

データが Java コントローラーに到達すると、 ["219"を long として解析しようとし、もちろん NumberFormatException が発生します。JavaScript 変数IDは次のようになります["219","217","218","195"]

誰かがガイダンスを提供してもらえますか。

4

3 に答える 3

0

JSON-jsを使用して、任意の JavaScript オブジェクトまたは配列を JSON にシリアル化できます。

于 2012-02-10T19:09:40.720 に答える
0

$.get()メソッドに渡す ID の配列を作成するだけです。

function addtocart() {
    $("#additem").click(function(){
        var myGrid = dojo.byId(dataGrid);
        var ids = [];
        var gridRow = myGrid.selection.getSelected();
        $.each( gridRow, function(i, l){
            ids[ids.length] = l.id;
        });
        alert(ids);
        var registcarturl = "${carturl}" + $("#regCart :selected").val();
        $.get(registcarturl, {instanceIds: ids}, function(data) {
            alert(data);
        });
    });
}

ids[ids.length]の代わりに使用した配列に別のインデックスをプッシュすることに注意してください.push.pushは新しいブラウザーでより高速に動作しますが、前者の方法は古いブラウザーでより高速に動作します。

于 2012-02-10T19:09:46.573 に答える
0

わかりましたので、解決策は非常に簡単でした。ここにあります。

    function addtocart() {
        $("#additem").click(function(){
            var myGrid = dojo.byId(dataGrid);
            var ids = [];
            var gridRow = myGrid.selection.getSelected();
            $.each( gridRow, function(i, l){
                ids[i] = l.id;
            });
            var registcarturl = "${carturl}" + $("#regCart :selected").val();
            $.get(registcarturl, {"modinstid[]": ids}, function(data) {
                alert(data);
            });
        });
    }

get リクエスト{"modinstid[]": ids}を見て、対応する spring MVC コントローラーは次のとおりです。

@RequestMapping(value = "addtocart/{cart}", method = RequestMethod.GET) public @ResponseBody
String addtocart(@PathVariable("cart") Long cart, @RequestParam("modinstid[]") ArrayList<String> instances, Model uiModel) {...Action logic goes here...}

アクション引数の@RequestParamプロパティを見てください

于 2012-02-14T13:14:14.457 に答える