我在Eclipse中使用Maven创建Web应用程序。当我将war文件部署到我的本地tomcat时,JSF内容不会显示在浏览器中。这是我的home.xhtml文件:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html">
<h:head>
<title>JSF Test</title>
</h:head>
<h:body>
<h3>Test</h3>
#{helloWorld.message}
</h:body>
</html>
浏览器中只显示标题。页面源显示:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"><head>
<title>JSF Test</title></head><body>
<h3>Test</h3>
</body>
</html>
我正在访问localhost:8080/test/home.xhtml
,.xhtml
的映射已启用:
<servlet-mapping>
<servlet-name>facesServlet</servlet-name>
<url-pattern>*.xhtml</url-pattern>
</servlet-mapping>
这是HelloWorld类:
package com.tutorialspoint.test;
import javax.faces.bean.ManagedBean;
@ManagedBean(name = "helloWorld", eager = true)
public class HelloWorld {
public HelloWorld() {
System.out.println("HelloWorld started!");
}
public String getMessage() {
return "Hello World!";
}
}
页面显然正在处理中,否则#{helloWorld.message}
命令将显示在页面源代码中,浏览器会将其呈现为纯文本。那可能是什么问题呢?谢谢!
答案 0 :(得分:3)
JSF无法发现托管bean,这表明在webapp的库之外的运行时类路径中的其他地方有一个不同版本的JSF API。 EL无法被解析和执行表明在servletcontainer库外的运行时类路径中的其他地方有一个不同版本的Servlet或EL API。 webapp的运行时类路径包括webapp自己的/WEB-INF/lib
文件夹,Tomcat自己的/lib
文件夹和JRE自己的/lib
和{ {1}}文件夹。
如果您确定永远不会触及Tomcat和JRE的库文件夹(前提是您使用http://tomcat.apache.org中的新Tomcat安装并且{{3}安装了新的JRE确保webapp的/lib/ext
不包含Tomcat或JRE本身提供的已经的库(例如Servlet API),然后确定应该很好。