我有个想法,就是把在编程过程中的所遇到的Exception都收集起来,这样可以渐渐的减少,或者不在重复遇到这样的异常,或者在以后遇到是也可以立刻回忆起来产生这种异常的原因,以便快速解决。
我自己收集了一些,包括解决的方法,可能有的异常是很低级的,但是发生的场景有可能不一样。总之,一点一点积累吧,一方面提高自己,另一方面也希望我遇到的这些异常,也能帮助大家尽快解决问题。这就是我的目的。如果有不合理的解决方法,也希望大家给我指证。
当然,大家也可以把自己的异常也加进来,这样就是一个异常处理集合啦,毕竟一个人的力量是有限的,大家一起努力吧!
先贴一点异常,希望能起到抛砖引玉的作用。有些问题比较低级,但也是提醒自己不要再犯这样低级的错误!
1.
org.hibernate.PropertyValueException: not-null property references a null or transient value: netctoss.entity.Users.loginName
字面意思:一个不允许为Null的属性引用了一个为Null的或者无效的值。
原因:在***.hbm.xml中的
<property name="ProjPortfolioID" column="ProjPortfolioID"
type="big_decimal" not-null="true" length="10" />
中,not-null="true",这说明属性ProjPortfolioID 不允许为空,而在ActionForm中未给他赋值,则就为空,所以就会报错!
就是插数据的时候把相关联的对象new好
RightsAddForm rf = (RightsAddForm) form;
Rights right = rf.getRight();
Modules modules = new Modules();
modules.setName(rf.getModules());
Operations operations = new Operations();
operations.setName(rf.getOperations());
right.setModules(modules);
right.setOperations(operations);
rightsBiz.addRight(right);
return mapping.findForward("next");
2.
com.mysql.jdbc.exceptions.MySQLSyntaxErrorException: Unknown column 'users0_.enrolldate' in 'field list'
这是由于字段名字命名不统一
3.
edit 时,读不到form中的数据 <html:text property="pricings.name" /> 后面不可添加 value 属性,因为首先回去查找该属性。
4.
java.lang.NullPointerException
at netctoss.action.UserServicesAction.list(UserServicesAction.java:28)
通过join fetch 查找
配置文件
spring beans : dao, biz
actions: path
struts action
5.
Cannot find bean: "org.apache.struts.taglib.html.BEAN" in any scope
option 要加标签 <html:option>
6.org.apache.jasper.JasperException: /user/bussupdate.jsp(141,6) Attribute selected invalid for tag option according to TLD
标签错误
7.
17:16:39,563 ERROR AbstractFlushingEventListener:301 - Could not synchronize database state with session
org.hibernate.TransientObjectException: object references an unsaved transient instance - save the transient instance before flushing: netctoss.entity.Users
8.
java.lang.IllegalArgumentException: No bean specified
表单ActionForm 读取错误
在edit时,因为 userServices对象 修改时,要通过两个属性来表达
poperty 是为保存修改时来用的,因为他有两个外键ID,
而显示在页面上要用request.setAttribute() 方法传到页面上,用EL表达式来显示
9.
javax.servlet.jsp.JspException: Getter for property userServices.price.name threw exception:
org.hibernate.LazyInitializationException: could not initialize proxy - the owning Session was closed
继承自泛型的findByPK() 方法,没有join fetch
要重载该方法
10.
javax.el.PropertyNotFoundException: Property 'id' not found on type java.lang.String
因为<c:ForEach item="${}">
11.
Ajax 编程
要有Action , 和 Javascript
选中用户后,资费列表会显示此用户没有开通的服务资费
//查找当前用户已经存在的服务资费
//将已存在的服务资费从列表中去除后再显示到页面上
12.
查询,删除cascade
13.
javax.servlet.ServletException: java.lang.ClassCastException:
netctoss.form.UserServicesCriteriaForm cannot be cast to netctoss.form.UsersCriteriaForm
路径设置问题
14.
ava.lang.NullPointerException
at netctoss.dao.impl.UserServicesDaoHibernateImpl.selectByCriteria(UserServicesDaoHibernateImpl.java:53)
是由于hql中
hql.append("select s from UserServices s join fetch s.user u ");
hql.append("where 1=1 ");
if(criteria.getUserName().trim()!=null && !criteria.getUserName().equals("")){
hql.append("and u.name=:name ");
}
if(criteria.getUserServiceLoginName().trim()!=null && !criteria.getUserServiceLoginName().equals("")){
hql.append("and s.loginName=:loginName ");
s 和 u 混淆了
15.
description The requested resource (/userServices/search/update) is not available.
查询表单没加html:标签,由此可见,这个错误信息不一定是路径配置问题
16.
org.hibernate.hql.ast.QuerySyntaxException: unexpected token:
from near line 1, column 10 [delete s from netctoss.entity.UserServices s where s.user.id=:id]
hql语句有错:delete 后面 不能加 别名
17.
java.lang.NumberFormatException: For input string: "user"
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:48)
forward 页面错误
18.
13:27:53,587 ERROR ContextLoader:215 - Context initialization failed
org.springframework.beans.factory.BeanCreationException:
Error creating bean with name 'selectDao' defined in file [C:\tomcat6\webapps\netctoss_01\WEB-INF\classes\applicationContext-beans.xml]:
Error setting property values; nested exception is org.springframework.beans.NotWritablePropertyException:
Invalid property 'sessionFactory' of bean class [netctoss.dao.impl.SelectDaoJdbcImpl]:
Bean property 'sessionFactory' is not writable or has an invalid setter method.
Does the parameter type of the setter match the return type of the getter?
这是由于selectDao extends JdbcDaoSupport
要用JDBCTemplate设置,将其注入到dao,再到biz
19.
avax.servlet.ServletException: Request[/account/acctyear] does not contain handler parameter named 'listYear'.
This may be caused by whitespace in the label text.
是由于action 继承了DispatchAction,
配置文件还是用MappingDispatchAction来配置的
如果要用action 继承了DispatchAction, 必须在jsp页面上action="/account.do? 后面加上method=listYear"
20.
column "duration" not found
原因:
String sql = "select labip, duration/(60*60*1000) duration from detailyears";
要加别名,否则会认为 duration/(60*60*1000) 为字段名
21.
java.sql.SQLException: Column 'logouttime' not found.
因为两个查询都用了同一个RowMapper, 要保证每一个查询语句都要查处logouttime字段
22.
查询语句中,关于时间的查询中
select labip, sum(duration/(60*60*1000)) duration from detailyears where logouttime >='2008-01-01 00:00:00' and logouttime <='2008-12-31 00:00:00' group by labip
时间要加‘’,否则会有语法错误
labip 192.168.0.21 也要加引号
23.
javax.servlet.ServletException:
Request[/account] does not contain handler parameter named 'method'. This may be caused by whitespace in the label text.
如果要用action 继承了DispatchAction, 必须在jsp页面上action="/account.do? 后面加上method=listYear"
24.****
页面上删除记录后,数据库里数据还在,没有持久化
这是因为系统中既要用到Hibernate,也要用到jdbc,
但是他们没有使用同一个数据源(实际都是同一个数据库,但是打开了两次),因此数据无法持久化,
必须共享同一个数据源,但是事务管理器可以分开
25.
org.hibernate.LazyInitializationException: could not initialize proxy - the owning Session was closed
search() 方法中 没有添加 fetech
26.账单查询
select u.name accountName, u.loginName accountLoginName, d.duration, p.basefee
from users u, userservices s , detailyears_2008 d, pricings p
where u.id=s.userid
and p.id=s.priceid
and d.loginname = s.loginname
and u.name="zw"
and month(d.logouttime)=4;
=======================================================
select s.loginName reckonLoginName, d.duration, d.logouttime logintime, p.basefee, p.ratefee, p.name
from users u, userservices s , detailmonths_4 d, pricings p
where u.id=s.userid
and p.id=s.priceid
and d.loginname = s.loginname
and u.name="zw"
and year(d.logouttime)=2008;
select s.loginName reckonLoginName, d.duration, d.logouttime logintime, p.basefee, p.ratefee, p.name
from users u, userservices s , detailmonths_4 d, pricings p
where u.id=s.userid
and p.id=s.priceid
and d.loginname = s.loginname
and u.name='zhongwei' and year(d.logouttime)=2008
27.
javax.servlet.ServletException: Request[/reckon] does not contain handler parameter named 'method'.
This may be caused by whitespace in the label text.
28.
java.lang.NumberFormatException: For input string: "accountName"
属性名错误
29.
分页: 通过一个static 变量保存当前页,和list 效果不一定好
30.
java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
PricingsForm pricingsForm = (PricingsForm) form;
String name = pricingsForm.getPricings().getName();
<tr>
<td align="right" valign="top">资费名称:</td>
td align="left" valign="top"><input type="text" name="pricings.name" value="" style="WIDTH:170px" onblur="validate()"></td>
</tr>
通过Javascript 来获得标签的值,在URL上加上一个参数传到Action中
var name = document.getElementById("name").value;
var requestURL = "${pageContext.request.contextPath}/fee/validate.do?name="+name;
31.
采用struts2 + spring + hibernate
32.
请教一个问题,
我现在要在页面上用<c:forEach>标签显示一系列的 checkbox,这是对数据表单的修改,我要先将这些数据显示在页面上,然后修改后再提交保存
<c:forEach items="${objects}" var="object">
<input type="checkbox" id="objectName" name="objectName" value="${object.id}" checked="checked">
${object.name }|${object.description }
</forEach>
我这些数据都是从数据库查出来的,如何显示哪个checkbox 已经被选中了?
33.
javax.servlet.jsp.JspException: Cannot find bean: "roles.rolerights" in any scope
34.
org.hibernate.PropertyAccessException: IllegalArgumentException occurred while calling setter of netctoss.entity.Rights.rolerights
35.
Hibernate中常见问题 No row with the given identifier exists问题的原因及解决
有两张表,table1和table2.产生此问题的原因就是table1里做了关联<one-to-one>或者<many-to-one unique="true">(特殊的多对一映射,实际就是一对一)来关联table2.
当hibernate查找的时候,table2里的数据没有与table1相匹配的,这样就会报No row with the given identifier exists这个错.(一句话,就是数据的问题!)
假如说,table1里有自身的主键id1,还有table2的主键id2,这两个字段. 如果hibenrate设置的单项关联,即使table1中的id2为null值,table2中id2中有值,查询都不会出错.
但是如果table1中的id2字段有值,但是这个值在table2中主键值里并没有,就会报上面的错!
如果hibernate是双向关联,那么table1中的id2为null值,但是table2中如果有值,就会报这个错.这种情况目前的解决办法就是改成单项关联,或者把不对应的数据改对!
36.
Tomcat中设置远程debug方法
何为远程调试?我们一般调试一个web项目的java代码时,需要将你的tomcat服务器和你的开发工具(比如Jbuilder)集成,或需要工具的一些插件支持(比如Eclipse下的myclipse等),这些方式都是在本地进行,即你的开发工具和tomcat运行在同一台服务器上,如果你的开发工具和服务器不再一台机器上那就需要实现远程调试功能了。
实现方法:
在tomcat的catalina.bat文件中加入下面的设置,当然SET CATALINA_OPTS 变量应该在使用它之前。这是在tomcat启动时设置一些虚拟机参数,使服务器允许远程连接功能,address=5888表示远程连接的端口号,可以设置成任意其他不冲突端口。其他的应用服务器比如weblogic也应该可以设置这些参数,有兴趣的可以测试。
SET CATALINA_OPTS=-server -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5888
这样就Ok了,重启动tomcat,可以直接独立启动,而不用在eclipes的插件中启动。打开eclipse中的debug设置窗口,选择Remote Java Application ,新建一个debug项,输入服务器IP和刚才设置端口号,点ok就可以进入debug状态了。Jbuilder中同样可以设置Remote Java Application。
37.
在授权与认证模块中
一个用户会有多个角色,当一个用户所拥有的两个角色中的权限有冲突时(即一个角色为不允许,而另一个为允许),则根据角色的优先级来确定何种权限。
38.
OA
1.组织机构
39.
java.lang.SecurityException: class "junit.framework.JUnit4TestCaseFacade"'s signer information does not match signer information of other classes in the same package
解决方法是在java build path的order and export中把junit调整到比较靠前位置。
40.
org.hibernate.HibernateException: No CurrentSessionContext configured!
我们使用如下代码获取Session:
sessionFactory = new Configuration().configure().buildSessionFactory();
Session session = sessionFactory.getCurrentSession();
使用getCurrentSession 不对;应该使用openSession
参考hibernate api doc 对 openSession 和 getCurrentSession 的说明
41.
org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'orgManager' is defined
42.
出现的问题解决:
问题1:Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory at org.springframework.util.ClassUtils.<clinit>(ClassUtils.java:67) at org.springframework.core.io.DefaultResourceLoader.<init>(DefaultResourceLoader.java:52) at org.springframework.context.support.AbstractApplicationContext.<init>(AbstractApplicationContext.java:184) at org.springframework.context.support.AbstractRefreshableApplicationContext.<init>(AbstractRefreshableApplicationContext.java:80) at org.springframework.context.support.AbstractXmlApplicationContext.<init>(AbstractXmlApplicationContext.java:58) at
需要加上:commons-logging.jar log4j-1.2.11.jar
问题2:Exception in thread "main" org.springframework.beans.factory.BeanDefinitionStoreException: Unexpected exception parsing XML document from class path resource [text.xml]; nested exception is java.lang.NoClassDefFoundError: org/aspectj/weaver/reflect/ReflectionWorld$ReflectionWorldException
Caused by: java.lang.NoClassDefFoundError: org/aspectj/weaver/reflect/ReflectionWorld$ReflectionWorldException
at java.lang.Class.forName0(Native Method)
需要加上:aspectjweaver.jar
问题3:Exception in thread "main" org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'logBean' defined in class path resource [text.xml]: Initialization of bean failed; nested exception is org.springframework.aop.framework.AopConfigException: Cannot proxy target class because CGLIB2 is not available. Add CGLIB to the class path or specify proxy interfaces.
Caused by: org.springframework.aop.framework.AopConfigException: Cannot proxy target class because CGLIB2 is not available. Add CGLIB to the class path or specify proxy interfaces.
需要加上:cglib-2.1.3.jar
问题4:xception in thread "main" org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'logBean' defined in class path resource [text.xml]: Initialization of bean failed; nested exception is java.lang.NoClassDefFoundError: org/objectweb/asm/Type
Caused by: java.lang.NoClassDefFoundError: org/objectweb/asm/Type
at net.sf.cglib.core.TypeUtils.parseType(TypeUtils.java:180)
需要加上:asm.jar
转载:http://pengchua.javaeye.com/blog/142879
问题5: CGLIB Enhancement failed: com.bowen.domain.Schools
java.lang.NoSuchMethodError: org.objectweb.asm.ClassVisitor.visit(IILjava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;)V
at net.sf.cglib.core.ClassEmitter.begin_class(ClassEmitter.java:77)
at net.sf.cglib.core.KeyFactory$Generator.generateClass(KeyFactory.java:173)
at net.sf.cglib.core.DefaultGeneratorStrategy.generate(DefaultGeneratorStrategy.java:25)
解决:由于不同版本让我想到了可能会因为其它三方包是不同版本引起的最新的MyEclipse,所以里面的Hibernate也是最新的3.1(它里面还带有一个3.0版本的)
删除 多余的包 Hibernate3.1现象2:
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory' defined in resource [/WEB-INF/dataAccessContext-hibernate.xml] of ServletContext: Instantiation of bean failed; nested exception is java.lang.NoClassDefFoundError: javax/transaction/TransactionManager
java.lang.NoClassDefFoundError: javax/transaction/TransactionManager
原因:缺少jta.jar
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
现象3:
java.lang.NoClassDefFoundError: org/dom4j/Attribute
缺dom4j.jar
java.lang.NoClassDefFoundError: net/sf/ehcache/CacheException
缺ehcache.jar
java.lang.NoClassDefFoundError: net/sf/cglib/core/KeyFactory
缺cglib-full.jar
43.
<a href="#" onClick="openWin('document.do?method=addInput','470')">
44.
<input type="hidden" name="method" value="add">
<input type="hidden" name="parentId" value="${orgForm.parentId}">
45.
参数化测试要点:
|.测试类必须由Parameterized测试运行器修饰
|.准备数据。数据的准备需要在一个方法中进行,该方法需要满足一定的要求:
|.. 该方法必须由Pamameters注解修饰
|.. 该方法必须为public static
|.. 该方法必须返回Collection类型
|.. 该方法的名字不作要求
|.. 该方法没有参数
转自:http://blog.csdn.net/kekenow/category/601786.aspx