FacesServlet (Java EEWTP/JSF问题的解决--java.lang.ClassNotFoundException: javax.faces.webapp.FacesServlet

转自:http://babyblue2004.bokee.com/5733663.html

这几日在www.eclipse.org上看了一篇文章(http://www.eclipse.org/webtools/jsf/dev_resource/JSFTutorial-RC3/JSFTools_tutorial.html),按照上面作了一个JSF程序。出现以下问题:

严重: Error loading WebappClassLoader
  delegate: false
  repositories:
    /WEB-INF/classes/
----------> Parent Classloader:
org.apache.catalina.loader.StandardClassLoader@184ec44
 javax.faces.webapp.FacesServlet
java.lang.ClassNotFoundException: javax.faces.webapp.FacesServlet

 at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1355)
 at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1201)
 at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1034)
 at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:932)
 at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:3951)
 at org.apache.catalina.core.StandardContext.start(StandardContext.java:4225)
 at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:759)
 at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:739)
 at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:524)
 at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:904)
 at org.apache.catalina.startup.HostConfig.deployDirectories(HostConfig.java:867)
 at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:474)
 at org.apache.catalina.startup.HostConfig.check(HostConfig.java:1190)
 at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:292)
 at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119)
 at org.apache.catalina.core.ContainerBase.backgroundProcess(ContainerBase.java:1305)
 at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1569)
 at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1578)
 at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.run(ContainerBase.java:1558)
 at java.lang.Thread.run(Unknown Source)
2006-10-8 9:51:58 org.apache.catalina.core.StandardContext loadOnStartup
严重: Servlet /JSFTutorial threw load() exception
java.lang.ClassNotFoundException: javax.faces.webapp.FacesServlet

 at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1355)
 at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1201)
 at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1034)
 at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:932)
 at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:3951)
 at org.apache.catalina.core.StandardContext.start(StandardContext.java:4225)
 at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:759)
 at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:739)
 at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:524)
 at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:904)
 at org.apache.catalina.startup.HostConfig.deployDirectories(HostConfig.java:867)
 at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:474)
 at org.apache.catalina.startup.HostConfig.check(HostConfig.java:1190)
 at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:292)
 at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119)
 at org.apache.catalina.core.ContainerBase.backgroundProcess(ContainerBase.java:1305)
 at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1569)
 at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1578)
 at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.run(ContainerBase.java:1558)
 at java.lang.Thread.run(Unknown Source)


问题的原因似乎是没有找到javax.faces.webapp.FacesServlet,但是这个类的包我是放在classpath中的,在eclipse的"Libraries"中可以看到。这是为何?

为什么Tomcat会到WEB-INF/classes里面去找这个文件?

我花了整整一天的时间来解决这个问题。

参考了这两篇文章
1.http://dev.eclipse.org/mhonarc/lists/wtp-jsf-dev/msg00158.html
2.http://forum.java.sun.com/thread.jspa?forumID=427&threadID=598929

第一步:
    将CLASS_PATH里面的jar包部署到WEB-INF目录中。这是在项目的属性中配置的。选择“JSF Library Refererences”,选中“Deploy jars to WEB-INF/lib”。
第二步:
    这时候出现了“java.lang.NullPointerException”错误,内容为 “javax.faces.webapp.FacesServlet.init”。根据第二篇文章,出现这样的问题是因为 FactoryFinder.getFactory()工厂方法没能正确地返回相应的工厂。这是配置问题,重新配置

<listener>
    <listener-class>
        com.sun.faces.config.ConfigureListener
    </listener-class>
</listener>

并删除<load-on-starup>1</load-on-starup>标签就可以了

ps:自己测试时,可能版本不同,未找到“JSF Library References”选项,于是直接在/WEB-INF下建/lib文件夹并负责相关jsf jar包到目录下,未出异常,可运行

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
对于Spring Boot整合JSF,你可以按照以下步骤进行操作: 1. 添加JSF依赖:在pom.xml文件中,添加JSF的依赖项,如下所示: ```xml <dependency> <groupId>javax.faces</groupId> <artifactId>javax.faces-api</artifactId> <version>2.3</version> </dependency> ``` 2. 配置JSF Servlet:在Spring Boot的配置中,添加以下配置,以将JSF Servlet映射到`/javax.faces`路径下: ```java import javax.faces.webapp.FacesServlet; import org.springframework.boot.web.servlet.ServletRegistrationBean; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class JsfConfig { @Bean public ServletRegistrationBean<FacesServlet> facesServletRegistration() { ServletRegistrationBean<FacesServlet> registration = new ServletRegistrationBean<>(new FacesServlet(), "*.jsf"); registration.setName("FacesServlet"); return registration; } } ``` 3. 配置JSF View Resolver:在Spring Boot的配置中,添加以下配置,以将JSF视图解析为`.xhtml`文件: ```java import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.ViewResolver; import org.springframework.web.servlet.view.InternalResourceViewResolver; @Configuration public class JsfConfig { @Bean public ViewResolver internalResourceViewResolver() { InternalResourceViewResolver resolver = new InternalResourceViewResolver(); resolver.setViewClass(JsfView.class); resolver.setPrefix("/WEB-INF/views/"); resolver.setSuffix(".xhtml"); return resolver; } } ``` 4. 创建JSF视图:在`/WEB-INF/views/`目录下创建JSF视图文件,例如`hello.xhtml`,并在其中定义JSF组件。 现在,你已经成功地将Spring Boot与JSF整合起来了。你可以在JSF视图中使用JSF的标签和组件。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值