比如后台代码是这样的:
 public class ImageAction {
       private ArrayList<HashMap<String,String>> pks;       public String update() {
         for (Map map: pks){
           doSth(map.get("seqNo"));
           .......         }       }      public ArrayList<HashMap<String, String>> getPks() {
          return pks;
      }      public void setPks(ArrayList<HashMap<String, String>> pks) {
          this.pks = pks;
      }    }ajax:jquery   j$.ajax({
            url:approveUrl,
            data: {pks: {"seqNo":"111"}},
            dataType:'json',
            type:'post',
            traditional: true,
            success:function (response) {
                hideProgressBar(parent.document)
                if (response.result==false){
                    alert(response.msg);
                    return;
                }//                document.location.reload();
            }        })结果到了后台,发现得到的参数总是ognl.NoConversionPossible,有没有人遇到过,我用的是webwork+jquery 1.4.3

解决方案 »

  1.   

    你既然ajax里的dataType是'json',那action里就拿json接收嘛 
      

  2.   


    这个不是必须的,你在action定义一个userName,在前端传递{userName:'theoffspring'},后台只要定义了setter,就会取到userName的。如果用json接收,怎么接收?
      

  3.   

    看api    包net.sf.json
      

  4.   

    用json-lib需要的就不是jquery来传递json类型的数据了,而是普通字符串了吧。
      

  5.   

    嗯 是的 要自己拼接格式  你试试把你的action里的pks 改成 jsonArray
      

  6.   

    本办法就是:
    你可以把页面参数拼接成字符串传给后台,再在后天截取就可以了。为什么一定用ArrayList<HashMap<String,String>> 类型了。
      

  7.   

    JsonBinder jb=JsonBinder.buildNonNullBinder();
    return jb.toJson(pks)
      

  8.   

    把 data 改成data:[{seqNo:'1'},{seqNo2:'2'}]形式   试一下  我没试过 不确定  
      

  9.   

    jsonArray无效,甚至其setter方法都不会调用,用gson可以方便地把json串转成List<Map>这样的,不过现在的问题是前台想用pks保存这样一个plain string,但是jquery/webwork还是把它当成一个json对象传过来了,我的setPks(String)没有被调用,也无法进一步fromJson成List。
    j$.ajax({
                url:approveUrl,
                data: {userName: '[{"userName":"theoffspring"}]'},
    //            dataType:'json',
                type:'post',
    //            traditional: true,
                success:function (response) {
                    hideProgressBar(parent.document)
                    if (response.result==false){
                        alert(response.msg);
                        return;
                    }
                }        })
    action:
      public void setPks(String pks) {
            this.pks = pks;
            Gson gson=new Gson();
            List<Map> list=gson.fromJson(pks,new TypeToken<List<Map<String,String>>>(){}.getType());
            System.out.println(list.size());
        }
      

  10.   

    笔误,ajax里面的userName应为pks,j$.ajax({
                url:approveUrl,
                data: {pks: '[{"userName":"theoffspring"}]'},
    //            dataType:'json',
                type:'post',
    //            traditional: true,
                success:function (response) {
                    hideProgressBar(parent.document)
                    if (response.result==false){
                        alert(response.msg);
                        return;
                    }
                }        })
      

  11.   

    因为截取麻烦,而且,以前Map里存放的key 个数不定,所以必须用List<Map>
      

  12.   

    话说  ajax提交了过后 你不会在action里request.getAttribute("pks")么
      

  13.   

    这个用法也太不标准了吧,现在都用ognl自动赋值。除此之外,没有解决办法了吗
      

  14.   

    因为我用的都是struct1 所以我也不清楚咯 爱莫能助 
      

  15.   

    后来重启了下电脑,发现好用了,当然后台还是用gson转一下的。可能是ie缓存的问题,导致一开始不好用。不过,记住,传递的参数,先用JSON.stringify转成字符串再传,这是个浏览器内置的js函数,如果不好用,下个json2.js,就好用了。