@ManagedBean未找到,#{helloWorld.message}未显示在浏览器中

时间:2014-08-21 09:23:23

标签: maven jsf jsf-2

我在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}命令将显示在页面源代码中,浏览器会将其呈现为纯文本。那可能是什么问题呢?谢谢!

1 个答案:

答案 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),然后确定应该很好。