JSF整合Spring遭遇——严重: Error listenerStart

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

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

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

 

< application >
        
< variable-resolver >
            org.springframework.web.jsf.DelegatingVariableResolver
        
</ variable-resolver >
    
</ application >

此处设置的目的是为了让Spring的Bean的名称可以在JSF中使用。

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

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

< listener >
        
< listener-class >
            org.springframework.web.context.ContextLoaderListener
        
</ listener-class >
    
</ listener >
< context-param >
        
< param-name > contextConfigLocation </ param-name >
        
< param-value > /WEB-INF/applicationContext.xml </ param-value >
    
</ context-param >

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

3.设置好了,现在启动Tomcat。

错误主角出场:严重: Error listenerStart。

错误就在<context-param>中,其<param-value>应该由/WEB-INF/applicationContext.xml,改为/WEB-INF/classes/applicationContext.xml。

到工程目录下一看,就明白了。可以看到web.xml文件处在/WebRoot/WEB-INF下,而applicationContext.xml却在/WebRoot/WEB-INF/classes下。

applicationContext.xml就是Spring的Bean的定义文件;而JSF的Bean的定义文件就是faces-config.xml。

所以,正确的设置为:

 

< context-param >
        
< param-name > contextConfigLocation </ param-name >
        
< param-value > /WEB-INF/classes/applicationContext.xml </ param-value >
    
</ context-param >

 

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

 

< context-param >
        
< param-name > javax.faces.CONFIG_FILES </ param-name >
        
< param-value > /WEB-INF/faces-config.xml </ param-value >
     
</ context-param >

 

 

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

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

上网google解决办法:

首先,在MyEclipse的安装目录下搜索hibernate-annotations.jar,Ctrl+C比较大的一个(一个222K,另一个127K)

然后,到Tomcat的/webapps/工程名/WEB-INF/lib下,Ctrl+V,覆盖比较小的那个。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值