上面的配置文件配置动态代理的地方不对个人看法:->既然你是用了动态代理,就应该指明要代理的对象 既
<property name="target">
<ref local="TFastenerDAO" />
</property>
上面的文件没有指定,当然会出错
<property name="target">
<ref local="TFastenerDAO" />
</property>
上面的文件没有指定,当然会出错
解决方案 »
- Flex 4中如何设置Spark SimpleText背景颜色 ??
- 求Castor官网,帮助文档之类
- 过滤器问题
- ibaits问题-------sqlmapclient对象无法生成
- oc4j或者是java的奇怪的内存错误问题,无论如何都不给应用分配内存。
- spring mvc框架如何解决一个页面内有多个form
- 关于STRUTS标签库
- 关于struts的一个错误!!!!!
- 在struts中,request.getSession().getServletContext().getAttribute和request.getAttribute的区别?
- 用DOM方式操作xml文件时,报错
- 我的上传问题
- 请问Collection如何转换成ResultSet?
修改的部分:
<bean id="txProxyTemplate" abstract="true"
class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
<property name="transactionManager"><ref bean="transactionManager"/></property>
<property name="target">
<ref local="TFastenerDAO" />
</property>
<property name="transactionAttributes">
<props>
<prop key="save*">PROPAGATION_REQUIRED</prop>
<prop key="update*">PROPAGATION_REQUIRED</prop>
<prop key="delete*">PROPAGATION_REQUIRED</prop>
<prop key="remove*">PROPAGATION_REQUIRED</prop>
<prop key="*">PROPAGATION_REQUIRED,readOnly</prop>
</props>
</property>
</bean>
异常如下:
2005-10-21 09:47:27,765 [ERROR] Servlet.service() for servlet jsp threw exception
java.lang.ClassCastException: $Proxy1
at com.paiao.bdpm.standardWork.nostruts.ST_Fastener.listT_FastenerForPage(ST_Fastener.java:105)
at org.apache.jsp.jsp.standardWorktest.PT_005fFastenerList1_jsp._jspService(org.apache.jsp.jsp.standardWorktest.PT_005fFastenerList1_jsp:109)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:322)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:291)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:241)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:856)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:744)
at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)
at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)
at java.lang.Thread.run(Thread.java:595)说明一下:我的配置文件和java文件是参考appfuse修改的,spring和hibernate的包是myeclipse的add spring Capabilities 和add hibernate Capabilities功能加上的。
<value>true</value>
</property>
我将配置文件修改后还是报异常
修改部分:
<bean id="txProxyTemplate" abstract="true" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
<property name="transactionManager"><ref bean="transactionManager"/></property>
<property name="proxyTargetClass">
<value>true</value>
</property>
<property name="transactionAttributes">
<props>
<prop key="save*">PROPAGATION_REQUIRED</prop>
<prop key="update*">PROPAGATION_REQUIRED</prop>
<prop key="delete*">PROPAGATION_REQUIRED</prop>
<prop key="remove*">PROPAGATION_REQUIRED</prop>
<prop key="*">PROPAGATION_REQUIRED,readOnly</prop>
</props>
</property>
</bean> 报的异常:
java.lang.ClassCastException: com.paiao.bdpm.standardWork.service.impl.TFastenerManagerImpl$$EnhancerByCGLIB$$8dc0c7d3
at com.paiao.bdpm.standardWork.nostruts.ST_Fastener.listT_FastenerForPage(ST_Fastener.java:105)
at org.apache.jsp.jsp.standardWorktest.PT_005fFastenerList1_jsp._jspService(org.apache.jsp.jsp.standardWorktest.PT_005fFastenerList1_jsp:109)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:322)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:291)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:241)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:856)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:744)
at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)
at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)
at java.lang.Thread.run(Thread.java:595)TFastenerDAO的代码:
public interface TFastenerDAO extends DAO {
public TFastener getTFastener(String fastener);
public List getTFasteners(String sql);
public void saveTFastener(TFastener fastener);
public void removeTFastener(String fastener);
}
DAO的代码:
public interface DAO {
public List getObjects(Class clazz);
public Object getObject(Class clazz, Serializable id);
public void saveObject(Object o);
public void removeObject(Class clazz, Serializable id);
}
public class TFastenerDAOHibernate extends BaseDAOHibernate implements TFastenerDAO {
public List getTFasteners(String sql) {
return getHibernateTemplate().find("from TFastener "+sql);
} public TFastener getTFastener(String fastenername) {
return (TFastener) getHibernateTemplate().get(TFastener.class,fastenername);
} public void saveTFastener(TFastener tFastener) {
getHibernateTemplate().saveOrUpdate(tFastener);
} public void removeTFastener(String fastenername) {
Object fanstener = getHibernateTemplate().load(TFastener.class, fastenername);
getHibernateTemplate().delete(fanstener);
}
}
BaseDAOHibernate 的代码:
public class BaseDAOHibernate extends HibernateDaoSupport implements DAO {
protected final Log log = LogFactory.getLog(getClass());
public void saveObject(Object o) {
getHibernateTemplate().saveOrUpdate(o);
}
public Object getObject(Class clazz, Serializable id) {
Object o = getHibernateTemplate().get(clazz, id);
if (o == null) {
throw new ObjectRetrievalFailureException(clazz, id);
}
return o;
}
public List getObjects(Class clazz) {
return getHibernateTemplate().loadAll(clazz);
}
public void removeObject(Class clazz, Serializable id) {
getHibernateTemplate().delete(getObject(clazz, id));
}
}
public DAO getTxProxyTemplate() {
...
}
public void setTxProxyTemplate(DAO newValue) {
...
}
TFastenerManagerImpl的代码:
public class TFastenerManagerImpl extends BaseManager implements TFastenerManager {
private TFastenerDAO dao;
public void setTFastenerDAO(TFastenerDAO dao) {
this.dao = dao;
}
public List getTFasteners(String sql) {
return dao.getTFasteners(sql);
}
public TFastener getTFastener(String fastenername) {
return dao.getTFastener(fastenername);
}
public void saveTFastener(TFastener fastener) {
dao.saveTFastener(fastener);
}
public void removeTFastener(String fastenername) {
dao.removeTFastener(fastenername);
}BaseManager的代码:
public class BaseManager implements Manager {
protected final Log log = LogFactory.getLog(getClass());
protected DAO dao = null;
public void setDAO(DAO dao) {
this.dao = dao;
}
public Object getObject(Class clazz, Serializable id) {
return dao.getObject(clazz, id);
}
public List getObjects(Class clazz) {
return dao.getObjects(clazz);
} public void removeObject(Class clazz, Serializable id) {
dao.removeObject(clazz, id);
} public void saveObject(Object o) {
dao.saveObject(o);
}
}
将下面的代码修改
TFastenerDAO tFastenerDAO = (TFastenerDAO) context.getBean("TFastenerManager");
alist=(ArrayList) tFastenerDAO.getTFasteners(whereSQL);
修改后的代码:
TFastenerManager tFastenerManager=(TFastenerManager) context.getBean("TFastenerManager");
alist=(ArrayList) tFastenerManager.getTFasteners(whereSQL);
因为我以前用的TFastenerDAO 方式调用:
TFastenerDAO tFastenerDAO = (TFastenerDAO) context.getBean("TFastenerDAO ");
alist=(ArrayList) tFastenerDAO.getTFasteners(whereSQL);
粗心大意将(TFastenerDAO) context.getBean("TFastenerDAO ");修改为(TFastenerDAO) context.getBean("TFastenerManager");肯定会报类型转换错误。开始还以为是配置问题,解决了半天。