Spring与JSF集成遇配置失败等异常,求解决方案
解决Spring与JSF 2.2集成时的配置异常
针对你遇到的这两个异常,我来帮你逐一分析并给出修复方案:
异常原因拆解
1. ClassCastException: org.springframework.web.jsf.el.SpringBeanFacesELResolver cannot be cast to javax.faces.el.VariableResolver
这个错误的核心是配置标签与JSF版本不匹配:
- 你使用的是JSF 2.2,但在
faces-config.xml里用了JSF 1.x专属的<variable-resolver>标签 SpringBeanFacesELResolver是Spring为JSF 2.x提供的EL解析器,它实现的是javax.el.ELResolver接口,而非JSF 1.x的javax.faces.el.VariableResolver接口,因此触发类型转换异常- 另外你的配置里还有个拼写错误:
<variable-esolver>少写了一个字母r,应为<variable-resolver>——但即使修正拼写,这个标签也不适用于JSF 2.2
2. IllegalStateException: Could not find backup for factory javax.faces.application.ApplicationFactory
这是第一个配置错误引发的连锁问题:JSF容器在初始化时因配置失败,无法正确加载应用工厂,进而找不到备份工厂。只要解决第一个问题,这个异常会自动消失。
修复步骤
第一步:修正faces-config.xml配置
将错误的<variable-resolver>标签替换为JSF 2.x支持的<el-resolver>,修正后的完整配置如下:
<faces-config xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-facesconfig_2_2.xsd" version="2.2"> <application> <el-resolver>org.springframework.web.jsf.el.SpringBeanFacesELResolver</el-resolver> </application> </faces-config>
第二步:验证依赖兼容性
- 确保Spring版本与JSF 2.2兼容:Spring 4.0及以上版本完全支持JSF 2.2
- 检查项目依赖,避免同时引入JSF 1.x和JSF 2.x的jar包(比如不要同时存在
jsf-api1.x和2.x版本)
第三步:清理并重启项目
- 清理项目构建目录(Maven执行
mvn clean,Gradle执行gradle clean) - 重新构建项目,确保依赖正确加载
- 重启应用服务器,清除容器缓存
验证结果
完成以上操作后,重新启动应用,两个异常都应该会被解决,Spring与JSF的集成即可正常工作。
内容的提问来源于stack exchange,提问作者shivaram pandramish
相关产品推荐
相关产品推荐

