日期:2014-05-19  浏览次数:20761 次

Struts2.3整合Hibernate4.1.2了一些问题
我在MyEclipse下调试了Hibernate程序,程序正确运行通过。然后我把这个程序有关的xml配置文件和Java类移植到了struts2下。

把原来Hibernate程序里的事务处理代码放到了action的execute()里,但是测试的时候出现了异常:
org.hibernate.HibernateException: Unable to get the default Bean Validation factory

按照网上的方法,往配置文件里加:
<property name="javax.persistence.validation.mode">none</property>

在Action类里添加public static void main()里测试execute()方法,问题解决通过。
但是如果在web端运行,却又抛出一个异常:
org.hibernate.exception.JDBCConnectionException: Could not open connection。

问题好多,
1.为什么在普通工程里不需要设置javax.persistence.validation.mode为none就能运行,而放在struts2工程里就必须要加none了呢?

2.为什么static void main()来直接调用里的execute()方法时能运行成功,而通过web浏览器访问Action调用execute()方法时就报错了呢?是不是和拦截器有关什么的?

谢谢各位解答了.

普通工程和main方法下可以测试通过,那与hibernate相关的xml应该是没什么问题了。这里就贴2个struts的配置吧:
struts.xml:
XML code

<struts>
    <constant name="struts.convention.default.parent.package" value="struts-default"/>
</struts>    



web.xml:
XML code

<web-app>
<filter>
   <filter-name>StrutsPrepareFilter</filter-name>
   <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareFilter</filter-class>
</filter>
<filter>
   <filter-name>sitemesh</filter-name>
   <filter-class>com.opensymphony.sitemesh.webapp.SiteMeshFilter</filter-class>
</filter>
<filter>
   <filter-name>StrutsExecuteFilter</filter-name>
   <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsExecuteFilter</filter-class>
</filter>


<filter-mapping>
   <filter-name>StrutsPrepareFilter</filter-name>
   <url-pattern>/*</url-pattern>
</filter-mapping>
<filter-mapping>
   <filter-name>sitemesh</filter-name>
   <url-pattern>*.jsp</url-pattern>
   <dispatcher>REQUEST</dispatcher>
   <dispatcher>FORWARD</dispatcher>
</filter-mapping>
<filter-mapping>
   <filter-name>StrutsExecuteFilter</filter-name>
   <url-pattern>/*</url-pattern>
</filter-mapping>

 </web-app>



这是不是和什么过滤器和拦截器机制有关系才导致隔了一层action后就无法正常访问hibernate了呢?

------解决方案--------------------
很多方面都有可能,不介意的话加Q,我帮你弄!
3848294