五子棋Web版的开发(二)--整合Spring4.3+hibernate4+Struts2.3

拖了这么久才把ssh框架给整合完毕,期间发现自己对SSH的知识真的是知之甚少。在整合期间遇到了无数的坑,我还是先把项目地址发一下吧

首先我遇到的第一个问题是 CreateQuery is not valid without active transaction 在网上搜索了一阵后发现我没有在Spring-config.xml文件里定义完整事务在文件中加入以下

<!--配置事务的传播特性-->
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<!-- 事务执行方式
REQUIRED:指定当前方法必需在事务环境中运行,
如果当前有事务环境就加入当前正在执行的事务环境,
如果当前没有事务,就新建一个事务。
这是默认值。
-->
<tx:method name="create*" propagation="REQUIRED" />
<tx:method name="save*" propagation="REQUIRED" />
<tx:method name="add*" propagation="REQUIRED" />
<tx:method name="update*" propagation="REQUIRED" />
<tx:method name="remove*" propagation="REQUIRED" />
<tx:method name="del*" propagation="REQUIRED" />
<tx:method name="import*" propagation="REQUIRED" />
<!--
指定当前方法以非事务方式执行操作,如果当前存在事务,就把当前事务挂起,等我以非事务的状态运行完,再继续原来的事务。
查询定义即可
read-only="true" 表示只读
-->
<tx:method name="*" propagation="NOT_SUPPORTED" read-only="true" />
</tx:attributes>
</tx:advice>

<!-- 定义切面,在 * base.service.*ServiceImpl.*(..) 中执行有关的hibernate session的事务操作 -->
<aop:config>
<aop:pointcut id="serviceOperation" expression="execution(* base.service.*ServiceImpl.*(..))" />
<aop:advisor advice-ref="txAdvice" pointcut-ref="serviceOperation" />
</aop:config>
  但是发现tx:advice一直是红色的于是在xml文件的头部加入xmlns:tx="http://www.springframework.org/schema/tx”
之后运行工程,又报ClassNotFoundException:org.aspectj.weaver.reflect.ReflectionWorld$ReflectionWorldException
同样是在网上搜索之后发现是少了一个名为aspectjweaver.jar的jar包加入之后就好了。
 
但是事情远远没有那么顺利。解决了这个问题之后立马又出现了下一个问题,后来又出现了CreateQuery is not valid without active transaction 这个错误,想必是之前并没有解决它。通过排除法之后发现Spring与hibernate整合需要注释掉<property name=“current_session_context_class”>thread</property>这句话。貌似加入这句后前后获取到的session就不是同一个。
随后又出现了model.User is not mapped [from model.User u where u.name ='null' and u.passwrod=‘null’]  起初我不明白为什么参数都是null,后来发现在ssh中由set,get方法自动注入时有两个需要注意的地方
1.在jsp 的form中需要注意input元素的name值必须要与action中成员变量名字相同,注意了是name值而不是id值
2.get,set方法自动生成时需要注意userName对应的get方法是getUserName(),只有这样才能识别自动注入
解决了这部分的问题之后,有出现了model.User is not mapped [from model.User u where u.name =‘xxx' and u.passwrod=‘123’]错误,即action已经获取到了tsp传过来的值但是没有匹配到对象。
后来我发现,数据库中的user表不知道什么时候被我改动过了,于是我又重新生成了一个User类以及User.hbm.xml。将dao类中的hql改为from User u where u.userName=“%s”and u.password=“%s"
 
终于完成了ssh的整合   从这里可以看出我对Spring hibernate Struts真的是一知半懂,真的得下功夫好好地看看框架知识了。。
 
 
格式有点乱 ,这个marsedit软件目前还是用的不太熟练。 太晚了  就睡了

转载于:https://www.cnblogs.com/kq-L/p/6041261.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值