1

我有一个非常简单的 hello world Java EE 应用程序。index.xhtml 如下:

<?xml version="1.0" encoding="UTF-8"?>
<!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 2.0 Hello World</title>
</h:head>
<h:body>
    <h3>#{problemBean.helloWorld}</h3>
</h:body>
</html>

当我在 pom.xml 文件中使用这些依赖项运行此应用程序时,它运行良好:

  <dependency>
        <groupId>com.sun.faces</groupId>
        <artifactId>jsf-api</artifactId>
        <version>2.1.19</version>
  </dependency>

  <dependency>
      <groupId>com.sun.faces</groupId>
      <artifactId>jsf-impl</artifactId>
      <version>2.1.19</version>
  </dependency>

但是,当我尝试:

<dependency>
    <groupId>javax</groupId>
    <artifactId>javaee-api</artifactId>
    <version>6.0</version>
</dependency>

<dependency>
    <groupId>javax</groupId>
    <artifactId>javaee-web-api</artifactId>
    <version>6.0</version>
</dependency>

我得到:

java.lang.ClassNotFoundException: com.sun.faces.config.ConfigureListener

据我所知,javaee-api 也有 jsf-api 提供的所有类?

那么我在这里缺少什么?


编辑:

这是我的 web.xml,如果它有帮助的话:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
          http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
         version="2.5">

    <servlet>
        <servlet-name>Faces Servlet</servlet-name>
        <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>

    <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>

    <welcome-file-list>
        <welcome-file>index.xhtml</welcome-file>
    </welcome-file-list>

</web-app>

和问题Bean.java:

package com.tugay;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;

@ManagedBean
@SessionScoped
public class ProblemBean {

    private String helloWorld = "Hello world";

    public String getHelloWorld() {
        return helloWorld;
    }

    public void setHelloWorld(String helloWorld) {
        this.helloWorld = helloWorld;
    }
}
4

2 回答 2

1

嗯,我猜是缺少 Mojarra 的实现库。尝试将此依赖项添加到您的 pom 中:

<dependency>
  <groupId>com.sun.faces</groupId>
  <artifactId>jsf-impl</artifactId>
  <version>2.1.19</version>
</dependency>

此外,我认为您只需要javaee-api(EE 6 full)或javaee-web-api(EE 6 web profile)。

于 2013-04-13T09:17:14.720 回答
0

我发现添加此依赖项允许您在 tomcat 中部署 .xhtml 文件,而无需在 WEB-INF/lib 文件夹中添加任何 jar。

<dependency>
    <groupId>org.glassfish</groupId>
    <artifactId>javax.faces</artifactId>
    <version>2.2.7</version>
</dependency>
于 2014-09-19T06:07:29.953 回答