如何在没有web.xml的JavaEE7环境中运行JSF2.2页面?

如何在没有web.xml的JavaEE7环境中运行JSF2.2页面?,jsf,web.xml,jsf-2.2,java-ee-7,Jsf,Web.xml,Jsf 2.2,Java Ee 7,我的非常简单的web应用程序有什么问题:web应用程序已成功部署到应用程序服务器,但hello bean未注入index.xhtml页面 (页面仅显示Facelets的Hello:#{Hello.value}) (这是我第一次使用JSF,所以这个问题可能很简单,而且我使用了一篇好文章) 我有战争档案的下一个结构: mywebapp | - WEB_INF | - classes | - Hello.class - index.html Hello.java有

我的非常简单的web应用程序有什么问题:web应用程序已成功部署到应用程序服务器,但hello bean未注入index.xhtml页面 (页面仅显示Facelets的Hello:#{Hello.value})

(这是我第一次使用JSF,所以这个问题可能很简单,而且我使用了一篇好文章)

我有战争档案的下一个结构:

mywebapp
|
 - WEB_INF
  |
   - classes
     |
      - Hello.class
 - index.html
Hello.java有:

import javax.enterprise.context.RequestScoped;
import javax.inject.Named;

@Named
@RequestScoped
public class Hello {

    private String value;

    public String getValue() {
        return "Hello JSF";
    }

    public void setValue(String value) {
        this.value = value;
    }
}
还有我的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:h="http://xmlns.jcp.org/jsf/html">
    <h:head>
        <title>My Facelet Page Title</title>
    </h:head>
    <h:body>
        Hello from Facelets: #{hello.value}
    </h:body>
</html>

我的Facelet页面标题
Facelets的Hello:#{Hello.value}
对于构建项目,我使用pom.xml:

....
<packaging>war</packaging>
<name>Simple web app</name>

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-war-plugin</artifactId>
            <version>2.4</version>
            <configuration>
                <failOnMissingWebXml>false</failOnMissingWebXml>
            </configuration>
        </plugin>
    </plugins>
</build>

<dependencies>
    <dependency>
        <groupId>javax</groupId>
        <artifactId>javaee-api</artifactId>
        <version>7.0</version>
        <scope>provided</scope>
    </dependency>
</dependencies>
。。。。
战争
简单web应用程序
org.apache.maven.plugins
maven战争插件
2.4
假的
爪哇
JavaEEAPI
7
假如
根据,
FacesServlet
将在以下任何条件为真时自动注册:

  • WEB-INF
  • 在应用程序类路径的jar的
    META-INF
    目录中可以找到
    faces config.xml
    文件
  • 在应用程序类路径中jar的
    META-INF
    目录中可以找到以
    .faces config.xml
    结尾的文件名
  • javax.faces.CONFIG_文件
    上下文参数在
    web.xml
    web fragment.xml
    中声明
  • 传递给
    ServletContainerInitializer
    实现的
    onStartup()
    方法的类的
    Set
    不是空的

如果您仅将
web.xml
用于注册
FacesServlet
,则如果满足上述任何条件,则该选项是可选的。

摘自JavaServerFaces 2.0,完整参考

Web应用程序的Web.xml文件中的一个条目启用Faces控制器servlet 当指定某个URL模式时,例如/faces/。在上运行JSF2.0时 Servlet 3.0容器(如Sun的Glassfish v3)的web.xml是可选的。如果没有 找到web.xml后,Faces控制器servlet将自动映射到 常用的URL模式:/faces/、.jsf和.faces

因此,您应该尝试以下方法:


localhost:8080/mywebapp/faces/index.xhtml

我已经将web.xml添加到web-INF中,在那里我为Facesservlet编写了配置,正如我在这个文件中找到的那样,我的web应用现在正在工作,但我仍然不知道如何在没有web.xml的情况下运行它。请粘贴
pom.xml
的全部内容。是的,感谢Arun Gupta,我错过了Faces控制器的自动映射,实际上我正在阅读您的书“JavaEE7 Essentials”,并尝试用JSF2.2检查示例。对我来说,这是第一次使用JSF.Cool,本书中的所有示例都可以在以下网站获得: