SSH框架整合常见问题汇总(一)
前言
以下所列问题具有针对性,但是遇到同类型问题时均可按照此思路进行解决。
问题1
class "org.apache.commons.dbcp.BasicDataSource" not found
使用MyEclipse时,用ssh时,applicationContext出错提示说:
class"org.apache.commons.dbcp.BasicDataSource" not found
解决
1、是因为没有导入依赖包commons-dbcp.jar,导入此包即可
2、在项目上右击build path—>configure build path..—>add library..—>MyEclipse Libraries选中Spring 2.0 Persistence JDBC libraries,同时可能会用到Spring 2.0 Persistence CORE libraries所以系统自动选上了,点击finish就可以了。
问题2
org.hibernate.MappingException: persistent class not known: cn.edu.ujn.model.UserDetail
解决
在userdetail表的反向工程文件中,将UserDetail类名写成了Userdetail导致后期报错,修正之后问题得以解决。怀疑是IDE存在问题。
<class name="cn.edu.ujn.model.UserDetail" table="userdetail" catalog="jkxyshsflower">
问题3
org.apache.jasper.JasperException: /register.jsp(26,2) No tag "" defined in tag library imported with prefix "ss"
解决
标签书写一定要规范,自己所犯错误就是因为<ss:head/>中加了一个空格<ss: head/>导致项目报错。
问题4
在dao层写入数据时又出现的问题: org.hibernate.engine.transaction.internal.jdbc.JdbcTransaction cannot be cast to javax.transaction.Transaction
解决
导包时导入错误,应导入的包名为org.hibernate.Transaction;而非javax.transaction.Transaction;
问题5
org.hibernate.PropertyAccessException: IllegalArgumentException occurred while calling setter of cn.edu.ujn.model.User.userid
解决
从以上错误信息可以得出参数类型不匹配,也就是说在自定义的model.User类中的userid(String类型)数据类型与hibernate中即在数据库存放的数据类型(int类型)不一致,从而导致问题出现。将model.User中的userid数据类型更改为int即可解决问题。
问题6
org.hibernate.exception.ConstraintViolationException: Cannot add or update a child row: a foreign key constraint fails (`jkxyshsflower`.`userdetail`, CONSTRAINT `FK_userdetail` FOREIGN KEY (`userid`) REFERENCES `user` (`userid`) ON UPDATE CASCADE)
解决
因为userdetail表中设置了user外键(见下图)。我们期望实现的是在执行插入操作时数据写入user表的同时也会写入userdetail表内。故在user表的映射xml文件中添加了语句<one-to-one name="userdetail" class="cn.edu.ujn.model.UserDetail" cascade="all"></one-to-one>。其中cascade="all"的作用就是级联更新和级联删除。比如:数据库中有主键表和外键表,当设置了CASCADE之后,当删除主键表后,外键表也随之消失。但是设置之后出现了以上错误提示。取消cascade="all"之后,发现数据可以写入user表内,但并未写入userdetail表中。
user数据表数据情况如下:
其中,id为17的数据为自己新添加的数据,前面的数据为之前已有数据,但userdetail表中却没有插入相关的内容。
在mysql中手动删除之前的数据时,提示如下
可见由于外键设置的原因。为此,需要首先理清一下各数据表之间的主外键依赖关系。我们应该注意的是外键起着维系表间关系的作用。当外键的值删除,主表中对应的列删除;当外键的值改变时,主表中对应的列值改变。有关数据表的主外键详见博文《MySQL进阶(一)主外键讲解》、《mysql进阶(十一)外键在数据库中的作用》。
这个问题不稳定,一阵一阵的,隔天再来运行程序发现又可以写入了,但是后来又出现了外键约束的问题。
问题7
HTTP Status 404 - No result defined for action cn.edu.ujn.action.UserAction and result input
解决
初步怀疑是缓存导致的问题,清理缓存之后问题已然存在。但是之前程序是没有任何问题的。没有result name=input的结果映射。如果页面正常输入,后台处理成功,那么走success界面;如果后台校验失败,会把error存放在指定变量中,这时默认result的name为input,而你没有配置,所以报错。
美文美图
文章来源: shq5785.blog.csdn.net,作者:No Silver Bullet,版权归原作者所有,如需转载,请联系作者。
原文链接:shq5785.blog.csdn.net/article/details/51999415