JS 代码,通过saveArrayList函数提交多层嵌套对象
====================================================
var arr2 = new Array();
arr2[0] = new LayoutData(1, "arr2", 1);
arr2[1] = new LayoutData(1, "arr2", 1);
arr2[0].Node = new Array();
arr2[0].Node[0]=new DrawObjPro(1, 2, "Test1", 1, "OKS");
arr2[0].Node[1]=new DrawObjPro(1, 2, "Test2", 1, "OKS");
arr2[1].Node = new Array();
arr2[1].Node[0]=new DrawObjPro(1, 2, "11111Test2", 1, "OKS");
arr2[1].Node[1]=new DrawObjPro(1, 2, "11111Test2", 1, "OKS"); ActEditBean.saveArrayList(arr2, testfun);
服务器端JAVA代码,接受数据
====================================================
public String saveArrayList(ArrayList <Hashtable> al){
System.out.println("al.size()="+al.size());
for (int i=0; i <al.size(); i++){
System.out.println(al.get(i));
Hashtable ht = (Hashtable) al.get(i);
for(Iterator it = ht.keySet().iterator();it.hasNext();){
String key= (String)it.next();
Object value = ht.get(key);
System.out.println(key+"---"+value);
}
//ArrayList test_al = (ArrayList)ht.get("Node");
}
return "OK";
}
服务器端打印结果
====================================================
al.size()=2
{Node=[reference:c0-e6,reference:c0-e12], layname=arr2, layid=1, laytype=1}
Node---[reference:c0-e6,reference:c0-e12]
layname---arr2
layid---1
laytype---1
{Node=[reference:c0-e23,reference:c0-e29], layname=arr2, layid=1, laytype=1}
Node---[reference:c0-e23,reference:c0-e29]
layname---arr2
layid---1
laytype---1 ===============================================================
问题是 如果将 //ArrayList test_al = (ArrayList)ht.get("Node"); 的注释符去掉,将提示
警告: --Erroring: batchId[2] message[java.lang.ClassCastException: java.lang.String cannot be cast to java.util.ArrayList] 我已经在dwr.xml中加入了如下
<signatures>
<![CDATA[
import java.util.ArrayList;
import java.util.Hashtable;
ActEditBean.saveArrayList(ArrayList(Hashtable));
]]>
</signatures> 实现了一层嵌套,如果我需要多层嵌套;有没人碰到过这种问题吗?
我因为提交是一个图形,图形面板可嵌套N层;
暂不先考虑其它自定义格式提交数据;就采用DWR实现,有人知道其它解决方法吗?
====================================================
var arr2 = new Array();
arr2[0] = new LayoutData(1, "arr2", 1);
arr2[1] = new LayoutData(1, "arr2", 1);
arr2[0].Node = new Array();
arr2[0].Node[0]=new DrawObjPro(1, 2, "Test1", 1, "OKS");
arr2[0].Node[1]=new DrawObjPro(1, 2, "Test2", 1, "OKS");
arr2[1].Node = new Array();
arr2[1].Node[0]=new DrawObjPro(1, 2, "11111Test2", 1, "OKS");
arr2[1].Node[1]=new DrawObjPro(1, 2, "11111Test2", 1, "OKS"); ActEditBean.saveArrayList(arr2, testfun);
服务器端JAVA代码,接受数据
====================================================
public String saveArrayList(ArrayList <Hashtable> al){
System.out.println("al.size()="+al.size());
for (int i=0; i <al.size(); i++){
System.out.println(al.get(i));
Hashtable ht = (Hashtable) al.get(i);
for(Iterator it = ht.keySet().iterator();it.hasNext();){
String key= (String)it.next();
Object value = ht.get(key);
System.out.println(key+"---"+value);
}
//ArrayList test_al = (ArrayList)ht.get("Node");
}
return "OK";
}
服务器端打印结果
====================================================
al.size()=2
{Node=[reference:c0-e6,reference:c0-e12], layname=arr2, layid=1, laytype=1}
Node---[reference:c0-e6,reference:c0-e12]
layname---arr2
layid---1
laytype---1
{Node=[reference:c0-e23,reference:c0-e29], layname=arr2, layid=1, laytype=1}
Node---[reference:c0-e23,reference:c0-e29]
layname---arr2
layid---1
laytype---1 ===============================================================
问题是 如果将 //ArrayList test_al = (ArrayList)ht.get("Node"); 的注释符去掉,将提示
警告: --Erroring: batchId[2] message[java.lang.ClassCastException: java.lang.String cannot be cast to java.util.ArrayList] 我已经在dwr.xml中加入了如下
<signatures>
<![CDATA[
import java.util.ArrayList;
import java.util.Hashtable;
ActEditBean.saveArrayList(ArrayList(Hashtable));
]]>
</signatures> 实现了一层嵌套,如果我需要多层嵌套;有没人碰到过这种问题吗?
我因为提交是一个图形,图形面板可嵌套N层;
暂不先考虑其它自定义格式提交数据;就采用DWR实现,有人知道其它解决方法吗?
解决方案 »
- 关于firefox如何播放MP3的问题??????
- 中国语 | 日本语 项目怎么做
- 关于数据库中读出的数据,转意显示的问题,困饶我一个晚上还没有解决!急!~!~!~!~!~!~!~!
- 连接SQL的问题
- 关于asp和jsp整合的问题
- 哪位大哥有JavaServer Faces的资料?
- connect.setAutoCommit ( false/true ) 对程序有什么影响啊?
- 如何实现将一个zip文件上传到服务器后,自动解压到指定的文件夹?(载线等待)
- Jsp页面中文字转换成16进制编码,如何正确显示
- 能不能给我介绍几本学jsp好书?谢谢!
- javascript只触发后台一次
- 两张表合并,内存有1g,请问怎么处理
=============================
function LayoutData(layid,layname,laytype, Node) {
this.layid = layid;
this.layname = layname;
this.laytype = laytype;
this.Node = Node;
this.getString = getString;
function getString(){
var str =
"layid:"+this.layid+";"+
"layname:"+this.layname+";"+
"laytype:"+this.laytype+";"+
"Node:"+this.Node;
return str;
}
};function DrawObjPro(prolid,proid,prolname,prolvaltype,provalue){
this.prolid = prolid;
this.proid = proid;
this.prolname = prolname;
this.prolvaltype = prolvaltype;
this.provalue = provalue;
this.getString = getString;
function getString(){
var str =
"prolid:"+this.prolid+";"+
"proid:"+this.proid+";"+
"prolname:"+this.prolname+";"+
"prolvaltype:"+this.prolvaltype+";"+
"provalue:"+this.provalue;
return str;
}
};
============================
2009-4-29 11:32:52 org.directwebremoting.util.CommonsLoggingOutput warn
警告: Missing type info for saveArrayList(0<0<0>>). Assuming this is a map with String keys. Please add to <signatures> in dwr.xml
2009-4-29 11:32:52 org.directwebremoting.util.CommonsLoggingOutput warn
警告: Missing type info for saveArrayList(0<0<1>>). Assuming this is a map with String keys. Please add to <signatures> in dwr.xml
2009-4-29 11:32:52 org.directwebremoting.util.CommonsLoggingOutput warn
警告: Missing type info for saveArrayList(0<0<0>>). Assuming this is a map with String keys. Please add to <signatures> in dwr.xml
2009-4-29 11:32:52 org.directwebremoting.util.CommonsLoggingOutput warn
警告: Missing type info for saveArrayList(0<0<1>>). Assuming this is a map with String keys. Please add to <signatures> in dwr.xml
2009-4-29 11:32:52 org.directwebremoting.util.CommonsLoggingOutput info看样子DWR已经知道有两层嵌套了,saveArrayList(0<0<0>>);那如何配置 signatures呢?
JS的 LayoutData,DrawObjPro 两个类结构也贴出来了
上面的ActEditBean.saveArrayList(arr2, testfun); 中的arr2是写的是测试数据,一个三层嵌套的结构
主要问题还是DWR将这个复杂类型转换成在服务端JAVA程序能识别的集合格式
而这种格式能描述给DWR进行识别的地方似乎只是设置signatures
一层嵌套通过上面的signatures设置已经解决,多层怎么办呢?
下面只是写了三层,多层可改成递归的方式实现;
=====================================================
请问:大家有没有更好的方式提交这种数据
比如 可读性强,更容易贴近面向对象
提供思路者有分,欢迎大家分享自己的智慧。
=====================================================
var ld = st.getEditorData();
retval = "";
retval+=ld.getString()+"∮";
var pdarr = st.getEditorData().Node;
for (var i=0; pdarr!=null && i<pdarr.length; i++){
retval+=pdarr[i].getString()+"⊥";
var ddarr = pdarr[i].Node;
for (var j=0; ddarr!=null && j<ddarr.length; j++){
retval+=ddarr[j].getString()+"∏";
var prarr = ddarr[j].Node;
for (var n=0; prarr!=null && n<prarr.length; n++){
retval+=prarr[n].getString()+"∩";
}
retval+="∪";
}
retval+="∫";
}
alert(retval);
==============================================
请问:
大家有没有更好的方式提交这种数据(对象类多层嵌套的结构或者说 集合数据多层嵌套)
比如 可读性强,更容易贴近面向对象
提供思路者有分,欢迎大家分享自己的智慧。
==============================================
比如结构:
{
a: test1,
b: {
a: test1,
b: {
a: test1,
b: test2,
c: test3
},
c: test3
},
c: test3
}
====================================================
c0-id=0
c0-e1=string:2
c0-e2=string:%E6%96%B0%E8%8A%82%E7%9B%AE
c0-e3=string:2
c0-e6=string:10
c0-e7=string:1
c0-e8=string:0
c0-e9=string:0
c0-e10=string:281
c0-e11=string:151
c0-e14=string:23
c0-e15=string:10
c0-e16=string:drawobj
c0-e17=string:image
c0-e18=null:null
c0-e21=string:1
c0-e22=string:31
c0-e23=string:%E5%9B%BE%E5%83%8F
c0-e24=string:1
c0-e25=string:timage.gif
c0-e20=Object_DrawObjPro:{prolid:reference:c0-e21, proid:reference:c0-e22, prolname:reference:c0-e23, prolvaltype:reference:c0-e24, provalue:reference:c0-e25}
c0-e27=string:9
c0-e28=string:32
c0-e29=string:%E5%AE%BD%E5%BA%A6
c0-e30=string:2
c0-e31=string:
c0-e26=Object_DrawObjPro:{prolid:reference:c0-e27, proid:reference:c0-e28, prolname:reference:c0-e29, prolvaltype:reference:c0-e30, provalue:reference:c0-e31}
c0-e33=string:10
c0-e34=string:33
c0-e35=string:%E9%AB%98%E5%BA%A6
c0-e36=string:2
c0-e37=string:
c0-e32=Object_DrawObjPro:{prolid:reference:c0-e33, proid:reference:c0-e34, prolname:reference:c0-e35, prolvaltype:reference:c0-e36, provalue:reference:c0-e37}
c0-e19=Array:[reference:c0-e20,reference:c0-e26,reference:c0-e32]
c0-e13=Object_DrawObjData:{objid:reference:c0-e14, panid:reference:c0-e15, objname:reference:c0-e16, objtype:reference:c0-e17, objresname:reference:c0-e18, Node:reference:c0-e19}
c0-e39=string:24
c0-e40=string:10
c0-e41=string:drawobj
c0-e42=string:image
c0-e43=null:null
c0-e46=string:1
c0-e47=string:34
c0-e48=string:%E5%9B%BE%E5%83%8F
c0-e49=string:1
c0-e50=string:combined_v6.gif
c0-e45=Object_DrawObjPro:{prolid:reference:c0-e46, proid:reference:c0-e47, prolname:reference:c0-e48, prolvaltype:reference:c0-e49, provalue:reference:c0-e50}
c0-e52=string:9
c0-e53=string:35
c0-e54=string:%E5%AE%BD%E5%BA%A6
c0-e55=string:2
c0-e56=string:
c0-e51=Object_DrawObjPro:{prolid:reference:c0-e52, proid:reference:c0-e53, prolname:reference:c0-e54, prolvaltype:reference:c0-e55, provalue:reference:c0-e56}
c0-e58=string:10
c0-e59=string:36
c0-e60=string:%E9%AB%98%E5%BA%A6
c0-e61=string:2
c0-e62=string:
c0-e57=Object_DrawObjPro:{prolid:reference:c0-e58, proid:reference:c0-e59, prolname:reference:c0-e60, prolvaltype:reference:c0-e61, provalue:reference:c0-e62}
c0-e44=Array:[reference:c0-e45,reference:c0-e51,reference:c0-e57]
c0-e38=Object_DrawObjData:{objid:reference:c0-e39, panid:reference:c0-e40, objname:reference:c0-e41, objtype:reference:c0-e42, objresname:reference:c0-e43, Node:reference:c0-e44}
c0-e12=Array:[reference:c0-e13,reference:c0-e38]
c0-e5=Object_PanelData:{panid:reference:c0-e6, panname:reference:c0-e7, pantop:reference:c0-e8, panleft:reference:c0-e9, panwidth:reference:c0-e10, panheight:reference:c0-e11, Node:reference:c0-e12}
c0-e64=string:11
c0-e65=string:2
c0-e66=string:0
c0-e67=string:280
c0-e68=string:120
c0-e69=string:151
c0-e72=string:25
c0-e73=string:11
c0-e74=string:drawobj
c0-e75=string:html
c0-e76=null:null
c0-e79=string:4
c0-e80=string:37
c0-e81=string:%E6%92%AD%E6%94%BE%E6%96%87%E4%BB%B6
c0-e82=string:1
c0-e83=string:thtml.htm
c0-e78=Object_DrawObjPro:{prolid:reference:c0-e79, proid:reference:c0-e80, prolname:reference:c0-e81, prolvaltype:reference:c0-e82, provalue:reference:c0-e83}
c0-e77=Array:[reference:c0-e78]
c0-e71=Object_DrawObjData:{objid:reference:c0-e72, panid:reference:c0-e73, objname:reference:c0-e74, objtype:reference:c0-e75, objresname:reference:c0-e76, Node:reference:c0-e77}
c0-e70=Array:[reference:c0-e71]
c0-e63=Object_PanelData:{panid:reference:c0-e64, panname:reference:c0-e65, pantop:reference:c0-e66, panleft:reference:c0-e67, panwidth:reference:c0-e68, panheight:reference:c0-e69, Node:reference:c0-e70}
c0-e85=string:12
c0-e86=string:3
c0-e87=string:150
c0-e88=string:0
c0-e89=string:400
c0-e90=string:80
c0-e93=string:26
c0-e94=string:12
c0-e95=string:drawobj
c0-e96=string:falsh
c0-e97=null:null
c0-e100=string:2
c0-e101=string:38
c0-e102=string:%E6%92%AD%E6%94%BE%E6%96%87%E4%BB%B6
c0-e103=string:1
c0-e104=string:tfalsh.swf
c0-e99=Object_DrawObjPro:{prolid:reference:c0-e100, proid:reference:c0-e101, prolname:reference:c0-e102, prolvaltype:reference:c0-e103, provalue:reference:c0-e104}
c0-e98=Array:[reference:c0-e99]
c0-e92=Object_DrawObjData:{objid:reference:c0-e93, panid:reference:c0-e94, objname:reference:c0-e95, objtype:reference:c0-e96, objresname:reference:c0-e97, Node:reference:c0-e98}
c0-e106=string:27
c0-e107=string:12
c0-e108=string:drawobj
c0-e109=string:falsh
c0-e110=null:null
c0-e113=string:1
c0-e114=string:
c0-e115=string:%E5%9B%BE%E5%83%8F
c0-e116=string:1
c0-e117=null:null
c0-e112=Object_DrawObjPro:{prolid:reference:c0-e113, proid:reference:c0-e114, prolname:reference:c0-e115, prolvaltype:reference:c0-e116, provalue:reference:c0-e117}
c0-e119=string:9
c0-e120=string:
c0-e121=string:%E5%AE%BD%E5%BA%A6
c0-e122=string:2
c0-e123=string:
c0-e118=Object_DrawObjPro:{prolid:reference:c0-e119, proid:reference:c0-e120, prolname:reference:c0-e121, prolvaltype:reference:c0-e122, provalue:reference:c0-e123}
c0-e125=string:10
c0-e126=string:
c0-e127=string:%E9%AB%98%E5%BA%A6
c0-e128=string:2
c0-e129=string:
c0-e124=Object_DrawObjPro:{prolid:reference:c0-e125, proid:reference:c0-e126, prolname:reference:c0-e127, prolvaltype:reference:c0-e128, provalue:reference:c0-e129}
c0-e111=Array:[reference:c0-e112,reference:c0-e118,reference:c0-e124]
c0-e105=Object_DrawObjData:{objid:reference:c0-e106, panid:reference:c0-e107, objname:reference:c0-e108, objtype:reference:c0-e109, objresname:reference:c0-e110, Node:reference:c0-e111}
c0-e91=Array:[reference:c0-e92,reference:c0-e105]
c0-e84=Object_PanelData:{panid:reference:c0-e85, panname:reference:c0-e86, pantop:reference:c0-e87, panleft:reference:c0-e88, panwidth:reference:c0-e89, panheight:reference:c0-e90, Node:reference:c0-e91}
c0-e4=Array:[reference:c0-e5,reference:c0-e63,reference:c0-e84]
c0-param0=Object_LayoutData:{layid:reference:c0-e1, layname:reference:c0-e2, laytype:reference:c0-e3, Node:reference:c0-e4}
batchId=7
有意思的是返回的是JS代码,可直接通过eval函数直接整出这个嵌套对象;
下面我贴出截取回应的HTTP头及数据 如下
============================================================
HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
Content-Type: text/javascript
Content-Length: 3132
Date: Sun, 31 May 2009 02:36:58 GMTthrow 'allowScriptTagRemoting is false.';
//#DWR-INSERT
//#DWR-REPLY
var s0 = {};
var s1 = [];
var s2 = {};
var s5 = [];
var s6 = {};
var s8 = [];
var s9 = {};
var s10 = {};
var s11 = {};
var s7 = {};
var s12 = [];
var s13 = {};
var s14 = {};
var s15 = {};
var s3 = {};
var s16 = [];
var s17 = {};
var s18 = [];
var s19 = {};
var s4 = {};
var s20 = [];
var s21 = {};
var s23 = [];
var s24 = {};
var s22 = {};
var s25 = [];
var s26 = {};
s0.node = s1;
s0.laymoditime = "2009-05-27 17:51:39";
s0.laytype = "2";
s0.laybgimg = "";
s0.laywidth = "0";
s0.uid = "0";
s0.laycreatetime = "2009-05-27 17:51:39";
s0.laybgcolor = "0";
s0.layid = "2";
s0.layname = "\u65B0\u8282\u76EE";
s0.laytop = "0";
s0.layheight = "0";
s0.layleft = "0";
s1[0] = s2;
s1[1] = s3;
s1[2] = s4;
s2.panscoop = "0";
s2.panleft = "0";
s2.node = s5;
s2.panbgimg = "";
s2.panbgcolor = "0";
s2.panwidth = "281";
s2.panscoopmask = "";
s2.panheight = "151";
s2.layid = "2";
s2.pantop = "0";
s2.panid = "10";
s2.panname = "1";
s5[0] = s6;
s5[1] = s7;
s6.objorder = "0";
s6.objtype = "image";
s6.objid = "23";
s6.objtypid = "0";
s6.node = s8;
s6.panid = "10";
s6.objname = "drawobj";
s8[0] = s9;
s8[1] = s10;
s8[2] = s11;
s9.objtype = "image";
s9.provalue = "timage.gif";
s9.proid = "31";
s9.prolid = "1";
s9.prolname = "\u56FE\u50CF";
s9.prolvaltype = "1";
s10.objtype = "image";
s10.provalue = "";
s10.proid = "32";
s10.prolid = "9";
s10.prolname = "\u5BBD\u5EA6";
s10.prolvaltype = "2";
s11.objtype = "image";
s11.provalue = "";
s11.proid = "33";
s11.prolid = "10";
s11.prolname = "\u9AD8\u5EA6";
s11.prolvaltype = "2";
s7.objorder = "0";
s7.objtype = "image";
s7.objid = "24";
s7.objtypid = "0";
s7.node = s12;
s7.panid = "10";
s7.objname = "drawobj";
s12[0] = s13;
s12[1] = s14;
s12[2] = s15;
s13.objtype = "image";
s13.provalue = "combined_v6.gif";
s13.proid = "34";
s13.prolid = "1";
s13.prolname = "\u56FE\u50CF";
s13.prolvaltype = "1";
s14.objtype = "image";
s14.provalue = "";
s14.proid = "35";
s14.prolid = "9";
s14.prolname = "\u5BBD\u5EA6";
s14.prolvaltype = "2";
s15.objtype = "image";
s15.provalue = "";
s15.proid = "36";
s15.prolid = "10";
s15.prolname = "\u9AD8\u5EA6";
s15.prolvaltype = "2";
s3.panscoop = "0";
s3.panleft = "280";
s3.node = s16;
s3.panbgimg = "";
s3.panbgcolor = "0";
s3.panwidth = "120";
s3.panscoopmask = "";
s3.panheight = "151";
s3.layid = "2";
s3.pantop = "0";
s3.panid = "11";
s3.panname = "2";
s16[0] = s17;
s17.objorder = "0";
s17.objtype = "html";
s17.objid = "25";
s17.objtypid = "0";
s17.node = s18;
s17.panid = "11";
s17.objname = "drawobj";
s18[0] = s19;
s19.objtype = "html";
s19.provalue = "thtml.htm";
s19.proid = "37";
s19.prolid = "4";
s19.prolname = "\u64AD\u653E\u6587\u4EF6";
s19.prolvaltype = "1";
s4.panscoop = "0";
s4.panleft = "0";
s4.node = s20;
s4.panbgimg = "";
s4.panbgcolor = "0";
s4.panwidth = "400";
s4.panscoopmask = "";
s4.panheight = "80";
s4.layid = "2";
s4.pantop = "150";
s4.panid = "12";
s4.panname = "3";
s20[0] = s21;
s20[1] = s22;
s21.objorder = "0";
s21.objtype = "falsh";
s21.objid = "26";
s21.objtypid = "0";
s21.node = s23;
s21.panid = "12";
s21.objname = "drawobj";
s23[0] = s24;
s24.objtype = "falsh";
s24.provalue = "tfalsh.swf";
s24.proid = "38";
s24.prolid = "2";
s24.prolname = "\u64AD\u653E\u6587\u4EF6";
s24.prolvaltype = "1";
s22.objorder = "0";
s22.objtype = "falsh";
s22.objid = "27";
s22.objtypid = "0";
s22.node = s25;
s22.panid = "12";
s22.objname = "drawobj";
s25[0] = s26;
s26.objtype = "falsh";
s26.provalue = "";
s26.proid = "";
s26.prolid = "2";
s26.prolname = "\u64AD\u653E\u6587\u4EF6";
s26.prolvaltype = "1";
dwr.engine._remoteHandleCallback('8', '0', [s0]);