0 0

DWR中返回Bean中含有List泛型时转换器报错的问题,急30

项目使用的是SSH框架,版本为struts2,hibernate3,spring3,整合DWR后,新建了一个bean,用于封装分页的相关内容,bean中含有一个List<T>,用于接收查询的数据,现在配置好之后调用返回时出现Conversion error for java.util.ArrayList.错误.

详细错误信息
10:16:10,750  WARN org.directwebremoting.convert.CollectionConverter:218 - Conversion error for java.util.ArrayList.
org.directwebremoting.ConversionException: Error marshalling data. See the logs for more details.
at org.directwebremoting.extend.PropertyDescriptorProperty.getValue(PropertyDescriptorProperty.java:76)
at org.directwebremoting.convert.BasicObjectConverter.convertOutbound(BasicObjectConverter.java:285)
at org.directwebremoting.impl.DefaultConverterManager.convertOutbound(DefaultConverterManager.java:403)
at org.directwebremoting.convert.BasicObjectConverter.convertOutbound(BasicObjectConverter.java:286)
at org.directwebremoting.impl.DefaultConverterManager.convertOutbound(DefaultConverterManager.java:403)
at org.directwebremoting.convert.CollectionConverter.convertOutbound(CollectionConverter.java:213)
at org.directwebremoting.impl.DefaultConverterManager.convertOutbound(DefaultConverterManager.java:403)
at org.directwebremoting.convert.BasicObjectConverter.convertOutbound(BasicObjectConverter.java:286)
at org.directwebremoting.impl.DefaultConverterManager.convertOutbound(DefaultConverterManager.java:403)
at org.directwebremoting.extend.ScriptBufferUtil.createOutput(ScriptBufferUtil.java:67)
at org.directwebremoting.dwrp.BaseCallHandler$CallScriptConduit.addScript(BaseCallHandler.java:472)
at org.directwebremoting.dwrp.BaseCallHandler.marshallOutbound(BaseCallHandler.java:329)
at org.directwebremoting.dwrp.BaseCallHandler.handle(BaseCallHandler.java:91)
at org.directwebremoting.servlet.UrlProcessor.handle(UrlProcessor.java:120)
at org.directwebremoting.servlet.DwrServlet.doPost(DwrServlet.java:141)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:88)
at com.payment.filter.StrutsFilter.doFilter(StrutsFilter.java:23)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:369)
at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:109)
at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:83)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:381)
at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:109)
at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:83)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:381)
at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:97)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:381)
at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:100)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:381)
at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:78)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:381)
at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:54)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:381)
at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:35)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:381)
at org.springframework.security.web.authentication.www.BasicAuthenticationFilter.doFilter(BasicAuthenticationFilter.java:177)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:381)
at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:187)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:381)
at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:105)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:381)
at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:79)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:381)
at org.springframework.security.web.session.ConcurrentSessionFilter.doFilter(ConcurrentSessionFilter.java:109)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:381)
at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:168)
at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:237)
at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:167)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:198)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:849)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:454)
at java.lang.Thread.run(Thread.java:619)
Caused by: java.lang.IllegalArgumentException
at com.sun.jmx.snmp.SnmpInt.<init>(SnmpInt.java:40)
at com.sun.jmx.snmp.SnmpUnsignedInt.<init>(SnmpUnsignedInt.java:42)
at com.sun.jmx.snmp.SnmpTimeticks.<init>(SnmpTimeticks.java:39)
at com.sun.jmx.snmp.Timestamp.getTimeTicks(Timestamp.java:97)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.directwebremoting.extend.PropertyDescriptorProperty.getValue(PropertyDescriptorProperty.java:72)
... 72 more


JavaBean:
package com.payment.util;

import java.util.ArrayList;
import java.util.List;

public class PagerModel<T> {
/**
* 分页集合的实体
*/
private List<T> entities;
/**
* 默认每页显示条数
*/
private int defaultPageSize;
/**
* 每页显示条数
*/
private int pageSize;
/**
* 一共多少页数
*/
private int pageCount;
/**
* 一共多少条记录
*/
private int recordCount;
/**
* 当前页
*/
private int currentPage = 1;
/**
* 上一页
*/
private int previousPage;
/**
* 下一页
*/
private int nextPage;

public int getPreviousPage() {
if (currentPage == 1) {
previousPage = 1;
} else {
previousPage = currentPage - 1;
}
return previousPage;
}

public void setPreviousPage(int previousPage) {
this.previousPage = previousPage;
}

public int getNextPage() {
if (nextPage > pageCount)
nextPage = pageCount;
else
nextPage = currentPage + 1;
return nextPage;
}

public void setNextPage(int nextPage) {
this.nextPage = nextPage;
}

public PagerModel() {
entities = new ArrayList<T>();
defaultPageSize = 10;
pageSize = 10;
pageCount = 1;
recordCount = 0;
}

public void add(T t) {
entities.add(t);
}

public List<T> getEntities() {
return entities;
}

public void setEntities(List<T> entities) {
this.entities = entities;
}

public int getDefaultPageSize() {
return defaultPageSize;
}

public void setDefaultPageSize(int defaultPageSize) {
this.defaultPageSize = defaultPageSize;
}

public int getPageSize() {
return pageSize;
}

public void setPageSize(int pageSize) {
this.pageSize = pageSize;
}

public int getPageCount() {
return pageCount;
// if (recordCount % pageSize == 0)
// return recordCount / pageSize;
// else
// return recordCount / pageSize + 1;
}

public void setPageCount(int pageCount) {
this.pageCount = pageCount;
}

public int getRecordCount() {
return recordCount;
}

public void setRecordCount(int recordCount) {
this.recordCount = recordCount;
}

public void setCurrentPage(int currentPage) {
this.currentPage = currentPage;
}

public int getCurrentPage() {
return this.currentPage;
}

public int getStartPage() {
int dis = pageCount - currentPage;
int startLocation = 1;
if (pageCount <= 7) {
return startLocation;
} else {
if (dis >= 3) {
if (currentPage > 4) {
startLocation = currentPage - 3;
}
} else {
startLocation = pageCount - 6;
}
}
return startLocation;
}
}

Baen中的List对应功能中使用的实体:
package com.payment.model;
import java.math.BigDecimal;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
import org.hibernate.annotations.Cache;
import org.hibernate.annotations.CacheConcurrencyStrategy;
import com.sun.jmx.snmp.Timestamp;

/**
* 交易流水
*
* @author lsj
*
*/
@Entity
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
@Table(name = "t_reqsns")
public class Reqsns {
/**
* id
*/
private Integer id;
/**
* 业务id
*/
private String aid;
/**
* 交易批次号
*/
private String reqsnsNum;
/**
* 交易状态;1用户已付款;2交易完成;3申请退款;4交易失败
*/
private String transStat;
/**
* 交易动作(只针交易操作发起方而定义);1充值;2提现;3付款;4收款;5退款;6网吧代充
*/
private Integer reqKind;
/**
* 因收金额
*/
private BigDecimal cashAmt;
/**
* 扣除金额
*/
private BigDecimal deductMoney;
/**
* 发生时间
*/
private Timestamp time;
/**
* 交易付款用户
*/
private User payer;
/**
* 交易收款用户
*/
private User payee;
/**
* 交易方向;1代付;2代收;3内部流转
*/
private Integer reqType;

@Id
@GeneratedValue
public Integer getId() {
return id;
}

public void setId(Integer id) {
this.id = id;
}

public String getAid() {
return aid;
}

public void setAid(String aid) {
this.aid = aid;
}

public String getReqsnsNum() {
return reqsnsNum;
}

public void setReqsnsNum(String reqsnsNum) {
this.reqsnsNum = reqsnsNum;
}

public String getTransStat() {
return transStat;
}

public void setTransStat(String transStat) {
this.transStat = transStat;
}

public Integer getReqKind() {
return reqKind;
}
public void setReqKind(Integer reqKind) {
this.reqKind = reqKind;
}
public BigDecimal getCashAmt() {
return cashAmt;
}
public void setCashAmt(BigDecimal cashAmt) {
this.cashAmt = cashAmt;
}
public BigDecimal getDeductMoney() {
return deductMoney;
}

public void setDeductMoney(BigDecimal deductMoney) {
this.deductMoney = deductMoney;
}

public Timestamp getTime() {
return time;
}

public void setTime(Timestamp time) {
this.time = time;
}

@ManyToOne(fetch = FetchType.LAZY)
public User getPayer() {
return payer;
}

public void setPayer(User payer) {
this.payer = payer;
}

@ManyToOne(fetch = FetchType.LAZY)
public User getPayee() {
return payee;
}

public void setPayee(User payee) {
this.payee = payee;
}

public Integer getReqType() {
return reqType;
}

public void setReqType(Integer reqType) {
this.reqType = reqType;
}

public Reqsns() {

};

public Reqsns(String aid, String reqsnsNum, String transStat,
Integer reqKind, BigDecimal cashAmt, BigDecimal deductMoney,
Timestamp time, User payer, User payee, Integer reqType) {
this.aid = aid;
this.reqsnsNum = reqsnsNum;
this.transStat = transStat;
this.reqKind = reqKind;
this.cashAmt = cashAmt;
this.deductMoney = deductMoney;
this.time = time;
this.payer = payer;
this.payee = payee;
this.reqType = reqType;
}

@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((aid == null) ? 0 : aid.hashCode());
return result;
}

@Override
public boolean equals(Object obj) {
final Reqsns other = (Reqsns) obj;
if (aid == null) {
if (other.aid != null)
return false;
} else if (!aid.equals(other.aid))
return false;
return true;
}

}

dwr配置文件:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE dwr PUBLIC "-//GetAhead Limited//DTD Direct Web Remoting 3.0//EN" "http://getahead.org/dwr/dwr30.dtd">

<dwr>
<allow>
<!--
<filter class="com.example.dwr.monitor.MonitoringAjaxFilter"/>
<filter class="org.directwebremoting.filter.ExtraLatencyAjaxFilter">
<param name="delay" value="200"/> </filter>
-->
<filter class="org.directwebremoting.filter.AuditLogAjaxFilter" />
<!-- chat -->
<create creator="spring" javascript="RegisterDwr">
<param name="beanName" value="registerDwr" />
</create>

<create creator="spring" javascript="TlTDwr">
<param name="beanName" value="tltDwr" />
</create>

<create creator="spring" javascript="CityDwr">
<param name="beanName" value="cityDwr" />
</create>

<create creator="spring" javascript="ManageDwr">
<param name="beanName" value="manageDwr" />
</create>

<create creator="spring" javascript="PageDwr">
<param name="beanName" value="pageDwr" />
</create>

<convert converter="exception"
match="com.payment.exception.AppException" />
<convert converter="bean" match="java.lang.StackTraceElement" />
<convert converter="bean" match="java.lang.Object" />

<convert converter="bean" match="com.payment.util.PagerModel">
<param name="include"
value="entities,currentPage,nextPage,pageCount,recordCount,previousPage,startPage,pageSize" />
</convert>

<convert converter="bean" match="com.payment.model.City">
<param name="include" value="id,name" />
</convert>

<convert converter="bean" match="com.payment.model.Reqsns">
<param name="include"value="id,aid,reqsnsNum,transStat,reqKind,cashAmt,deductMoney,time,payer,payee,reqType" />
</convert>

<convert converter="bean" match="com.payment.model.User">
<param name="include" value="id,extension" />
</convert>

<convert converter="bean" match="com.payment.model.Extension">
<param name="include" value="id,bank" />
</convert>

<convert converter="bean" match="com.payment.model.Bank">
<param name="include" value="id,aid,name,code,image" />
</convert>
</allow>
</dwr>

我感觉配置应该都是对的,不知道为什么会报转换ArrayList的时候出错,以前的项目也是这样用的都没问题,请指点,很急啊,谢谢!!!!!!

问题补充:
Rod_johnson 写道
在dwr.xml 里添加你的泛型转换
例如:
<convert converter="bean" match="com.haha.model.User"/>



<convert converter="bean" match="com.payment.model.Reqsns">
<param name="include"value="id,aid,reqsnsNum,transStat,reqKind,cashAmt,deductMoney,time,payer,payee,reqType" />
</convert>

DWR中的对应实体的convert是声明了的
DWR 
2011年12月06日 10:28

2个答案 按时间排序 按投票排序

0 0

组织directwebremoting警告。。转换。collectionconverter:218 -java.util.arraylist转换误差。
match应该匹配集合所对应的泛型,所以要match=“list泛型中的实体类”

2011年12月09日 11:23
0 0

在dwr.xml 里添加你的泛型转换
例如:
<convert converter="bean" match="com.haha.model.User"/>

2011年12月06日 15:11

相关推荐

Global site tag (gtag.js) - Google Analytics