减肥的办法:JSF整合Spring错误的解决办法



在JSF中整合Spring主要就是为了让SpringBean名称可以被JSF当做是自己<managed-bean-name>标签上名称来使用也就是当JSF定义文件中根据名称要求Bean例子时若JSF在自己Context中找不到名称就可以到SpringContext中去找SpringBean定义文件就是applicationContext.xml;而JSFBean定义文件就是faces-config.xml我用是MyEclipse

本文主角就是在整合过程中Tomcat启动时出现——严重: Error listenerStart

下面就开始痛苦整合过程1.在JSFfaces-config.xml中添加如下设置:



\"\"\" align=top><application>
\"\"\" align=top>
<variable-resolver>
\"\"\" align=top>org.springframework.web.jsf.DelegatingVariableResolver
\"\"\" align=top>
</variable-resolver>
\"\"\" align=top>
</application>

此处设置是为了让SpringBean名称可以在JSF中使用

2.在web.xml中添加如下设置:

注意:此处设置有本文题目中主角——严重: Error listenerStart就诞生于此处

\"\"\" align=top><listener>
\"\"\" align=top>
<listener->
\"\"\" align=top>org.springframework.web.context.ContextLoaderListener
\"\"\" align=top>
</listener->
\"\"\" align=top>
</listener>
\"\"\" align=top>
<context-param>
\"\"\" align=top>
<param-name>contextConfigLocation</param-name>


\"\"\" align=top>
<param-value>/WEB-INF/applicationContext.xml</param-value>
\"\"\" align=top>
</context-param>

为了能知道Bean定义文件名称和位置必须在<listener>中使用ContextLoaderListener类并在<context-param>中指定Bean定义文件名称和位置

3.设置好了现在启动Tomcat

主角出场:严重: Error listenerStart

就在<context-param>中其<param-value>应该由/WEB-INF/applicationContext.xml改为/WEB-INF/es/applicationContext.xml

到工程目录下就明白了可以看到web.xml文件处在\\WebRoot\\WEB-INF下而applicationContext.xml却在\\WebRoot\\WEB-INF\\es下

applicationContext.xml就是SpringBean定义文件;而JSFBean定义文件就是faces-config.xml

所以正确设置为:



\"\"\" align=top><context-param>
\"\"\" align=top>
<param-name>contextConfigLocation</param-name>
\"\"\" align=top>
<param-value>/WEB-INF/es/applicationContext.xml</param-value>
\"\"\" align=top>
</context-param>

[Page]

另外由于faces-config.xml于web.xml在同目录下都在\\WebRoot\\WEB-INF下所以在web.xml中设置为:



\"\"\" align=top><context-param>
\"\"\" align=top>
<param-name>javax.faces.CONFIG_FILES</param-name>
\"\"\" align=top>
<param-value>/WEB-INF/faces-config.xml</

param-value>
\"\"\" align=top>
</context-param>





另外此前已经整合Hibernate和Spring变成Hibernate+Spring+JSF在运行过程中又出现如下异常:

java.lang.NoClassDefFoundError: org/hibernate/cfg/HbmBinder$SecondPass...

解决办法:

首先在MyEclipse安装目录下搜索hibernate-annotations.jarCtrl+C比较大个(个222K个127K)

然后到工程\\WebRoot\\WEB-INF\\lib下Ctrl+V覆盖比较小那个

Tags: 

延伸阅读

最新评论

发表评论