DWR调用参数为List<Object>的方法出错
悬赏:20 发布时间:2008-07-06 提问人:ufopipi (初级程序员)
我想调用一个参数为List<Person>的方法,但是报转换错误。调用参数为Person的方法成功,调用参数为List<String>也可以。
我搜到了跟我问题一样的帖子,但是没有答案。。:( 希望大家能帮帮我。
JavaScript代码如下:
TestServ代码如下:
DWR.XML配置如下:
报错如下:
在debug时看到lp的值是这样的:[{id:reference:c0-e2, name:reference:c0-e3, pwd:reference:c0-e4}, {id:reference:c0-e6, name:reference:c0-e7, pwd:reference:c0-e8}]
请问这是什么原因造成转换失败的?
问题补充:
原因以找到 我使用了Spring 如果 使用new创建则无问题。
该问题已经关闭: 原因以找到 参见问题补充
我搜到了跟我问题一样的帖子,但是没有答案。。:( 希望大家能帮帮我。
JavaScript代码如下:
function insertPerson(){
var person1 = new Object();
person1.id = '1';
person1.name = '2';
person1.pwd = '3';
var person2 = new Object();
person2.id = '1';
person2.name = '2';
person2.pwd = '3';
var personlist = new Array();
personlist[0] = person1;
personlist[1] = person2;
TestServ.insertListPersons(personlist,{
callback:function() {alert('插入成功')},
errorHandler:function(errorString, exception) {alert(errorString)}
});
}
TestServ代码如下:
public class TestServ{
public void insertListPersons(List<Person> lp){
try{
for (int i=0;i<lp.size();i++){
((PersonDao)this.getBd()).insertPerson(lp.get(i));
}
} catch (RuntimeException e) {
e.printStackTrace();
throw new RuntimeException("插入人表出错!");
}
}
}
DWR.XML配置如下:
<dwr> <allow> <convert converter="bean" match="com.chuhong.web.business.model.Person" > <param name="include" value="id,name,pwd"></param> </convert> <create creator="spring" javascript="UserManager"> <param name="beanName" value="UserManager" /> </create> <create creator="spring" javascript="TestServ"> <param name="beanName" value="testServ" /> </create> </allow> <signatures> <![CDATA[ import java.util.List; import com.chuhong.web.business.model.Person; import com.chuhong.web.service.TestServ; TestServ.insertListPersons(List<Person> lp); ]]> </signatures> </dwr>
报错如下:
WARN [http-8080-Processor24] (CommonsLoggingOutput.java:59) - Missing type info for insertListPersons(0<0>). Assuming this is a map with String keys. Please add to <signatures> in dwr.xml
INFO [http-8080-Processor24] (CommonsLoggingOutput.java:51) - Exec: TestServ.insertListPersons()
java.lang.ClassCastException: java.lang.String
at com.chuhong.web.service.TestServ.insertListPersons(TestServ.java:47)
at com.chuhong.web.service.TestServ$$FastClassByCGLIB$$4d9a7d26.invoke(<generated>)
at net.sf.cglib.proxy.MethodProxy.invoke(MethodProxy.java:149)
......
在debug时看到lp的值是这样的:[{id:reference:c0-e2, name:reference:c0-e3, pwd:reference:c0-e4}, {id:reference:c0-e6, name:reference:c0-e7, pwd:reference:c0-e8}]
请问这是什么原因造成转换失败的?
问题补充:
原因以找到 我使用了Spring 如果 使用new创建则无问题。
该问题已经关闭: 原因以找到 参见问题补充
回答
引用
person1.id = '1';
问题可能出在这里
var person1 = new Object();
person1.id = 1;
person1.name = '2';
person1.pwd = '3';
var person2 = new Object();
person2.id = 1;
person2.name = '2';
person2.pwd = '3';
你的javabean的id应该为integer类型的吧
yourgame (初级程序员) 2008-07-06
类型转换错误,
at com.chuhong.web.service.TestServ.insertListPersons(TestServ.java:47)
是哪句代码??
at com.chuhong.web.service.TestServ.insertListPersons(TestServ.java:47)
是哪句代码??
yanbingwei (初级程序员) 2008-07-07
传入的参数DWR默认为MAP结构,请把public void insertListPersons(List<Person> lp){
的List改为MAP进行操作就可以了
的List改为MAP进行操作就可以了
glacier3 (初级程序员) 2008-07-07




