我在哪里放置XHTML文件以使它们在GlassFish Web容器中可见?

时间:2010-08-02 11:49:54

标签: java maven-2 jsf glassfish facelets

这是我项目的结构(正好是这五个文件):

/p1
  pom.xml
  /src
    /main
      /java
      /webapp
        a.html
        b.xhtml
      /WEB-INF
        faces-config.xml
        web.xml

我正在将此WAR部署到GlassFish,我可以成功访问此URL:http://localhost:8080/p1/a.html。当我试图打开http://localhost:8080/p1/b.xhtml时,我收到了一条消息

The requested resource (/p1/b.xhtml) is not available.

我做错了什么?

PS。来自pom.xml的依赖关系:

...
<dependency>
  <groupId>com.sun.faces</groupId>
  <artifactId>jsf-api</artifactId>
  <version>${jsf.version}</version>
  <scope>provided</scope>
</dependency>
<dependency>
  <groupId>com.sun.faces</groupId>
  <artifactId>jsf-impl</artifactId>
  <version>${jsf.version}</version>
  <scope>provided</scope>
</dependency>
<dependency>
  <groupId>com.sun.facelets</groupId>
  <artifactId>jsf-facelets</artifactId>
  <version>${facelets.version}</version>
</dependency>
...

这是我的web.xml(核心部分):

<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>*.xhtml</url-pattern>
</servlet-mapping>

我的faces-config.xml

<application>
  <view-handler>com.sun.facelets.FaceletViewHandler</view-handler>
</application>

1 个答案:

答案 0 :(得分:2)

对于Maven方面,事情看起来不错,但facelets也应该是provided。实际上,我使用以下依赖项:

<!-- This dependency will bring in everything we need for JAVA EE6 -->
<dependency>
  <groupId>javax</groupId>
  <artifactId>javaee-api</artifactId>
  <version>6.0</version>
  <scope>provided</scope>
</dependency>

对于JSF部分,服务器日志中没有任何内容?为了以防万一,您是否可以将以下内容添加到web.xml以查看是否获得了更多有用的输出:

<context-param>
    <param-name>javax.faces.PROJECT_STAGE</param-name>
    <param-value>Development</param-value>
</context-param>

作为旁注,您不需要faces-config.xml,因为Facelets是JSF 2.0中的默认视图处理程序。但这应该不是问题。

PS:就个人而言,我更喜欢将Faces Servlet映射到类似*.jsf的内容(以清楚地将任何映射的网址与实际的.xhtml facelet页面相关联,该网页将由Faces Servlet)。

另见