DWR调用参数为List<Object>的方法出错

悬赏:20 发布时间:2008-07-06 提问人:ufopipi (初级程序员)

我想调用一个参数为List<Person>的方法,但是报转换错误。调用参数为Person的方法成功,调用参数为List<String>也可以。
我搜到了跟我问题一样的帖子,但是没有答案。。:( 希望大家能帮帮我。

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)
是哪句代码??
yanbingwei (初级程序员) 2008-07-07
传入的参数DWR默认为MAP结构,请把public void insertListPersons(List<Person> lp){
的List改为MAP进行操作就可以了
glacier3 (初级程序员) 2008-07-07