我在JSF中尝试一个简单的hello world应用程序,但是基于tomcat在启动时抛出的异常,我发现FacesServlet
没有被初始化。我有所需的jar
个文件myfaces-api, bundle, impl
和公共beanutils,编解码器,集合,消化器,日志记录。除此之外,我在另一个关于SO的问题中读到了我还需要jsf-api.jar and jsf-impl.jar
我也放在WEB-INF/lib
并添加到构建路径
仍然没有运气。我正在Ubuntu上开发,使用Eclipse和Tomcat 7
这是我的web.xml
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
<display-name>Doom</display-name>
<display-name>JavaServerFaces</display-name>
<!-- Change to "Production" when you are ready to deploy -->
<context-param>
<param-name>javax.faces.PROJECT_STAGE</param-name>
<param-value>Development</param-value>
</context-param>
<!-- Welcome page -->
<welcome-file-list>
<welcome-file>faces/welcome.xhtml</welcome-file>
</welcome-file-list>
<!-- JSF mapping -->
<servlet>
<servlet-name>Faces Servlet</servlet-name>
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<!-- Map these files with JSF -->
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>/faces/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>*.jsf</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>*.faces</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>*.xhtml</url-pattern>
</servlet-mapping>
</web-app>
这是例外
java.lang.ClassNotFoundException: javax.faces.webapp.FacesServlet
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1676)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1521)
at org.apache.catalina.core.DefaultInstanceManager.loadClass(DefaultInstanceManager.java:415)
at org.apache.catalina.core.DefaultInstanceManager.loadClassMaybePrivileged(DefaultInstanceManager.java:397)
at org.apache.catalina.core.DefaultInstanceManager.newInstance(DefaultInstanceManager.java:118)
at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1062)
at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:1010)
at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:4935)
at org.apache.catalina.core.StandardContext$3.call(StandardContext.java:5262)
at org.apache.catalina.core.StandardContext$3.call(StandardContext.java:5257)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)
at java.util.concurrent.FutureTask.run(FutureTask.java:166)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:724)
答案 0 :(得分:15)
两周后我找到了答案。很简单,最终总是如此。你需要复制两个
jsf-api.jar
jsf-impl.jar
给tomcat lib
。在project
lib中使用它似乎不起作用。
答案 1 :(得分:1)
我遇到了同样的问题,使用Eclipse Juno和Tomcat 7 - Tomee 1.6.0。
我想使用mojarra 2.0.3,我在服务器部署中发现了很多问题。我已经解决了它在Tomcat lib中删除myfaces - * .jar;然后在Tomcat目录中添加mojarra lib,然后启动服务器。现在一切都好,它正在运行。
经过多次配置更改后,我发现真正有用的是Tomcat目录中安装的库,直接忽略Eclipse配置。也许是一个错误?
最后,我已经解决了我自己手动更改Tomcat库的问题。我不认为将来会出现问题。
答案 2 :(得分:0)
此依赖项包含必需的库,可能会解决您的问题
'org.glassfish:javax.faces:2.3.0'
答案 3 :(得分:-2)
添加以下依赖项可以解决该问题。我正在使用web.xml中的JSF依赖关系创建一个webapp。因此,必须将它们添加到pom.xml中才能解决问题。
<dependency>
<groupId>com.sun.faces</groupId>
<artifactId>jsf-api</artifactId>
<version>2.1.7</version>
</dependency>
<dependency>
<groupId>com.sun.faces</groupId>
<artifactId>jsf-impl</artifactId>
<version>2.1.7</version>
</dependency>
使用所需的任何版本。