2012-07-04 77 views
5

在我的maven项目中,我创建了一个“index.xhtml”文件。当我建立并运行项目时,Web浏览器没有显示任何内容。当我查看源代码时,我仍然可以看到源代码,而不是普通的html标签。PrimeFaces不呈现

我试图通过创建XHTML文件:

  1. 选择项目,右键单击新建..并选择其他...,然后选择“网络”类别,然后JSF页面。
  2. 选择项目,右键单击New ..并选择Other ..并选择“JavaServer Faces”类别,然后选择JSF Page。
  3. 选择项目,右键单击新建并选择其他..并选择“其他”类别,然后选择XHTML页面。

上述方法都不起作用。

的Maven POM

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
<modelVersion>4.0.0</modelVersion> 

<groupId>ProfitV10</groupId> 
<artifactId>ProfitV10</artifactId> 
<version>1.0-SNAPSHOT</version> 
<packaging>war</packaging> 

<name>ProfitV10</name> 

<properties> 
    <endorsed.dir>${project.build.directory}/endorsed</endorsed.dir> 
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
</properties> 

<dependencies> 
    <dependency> 
     <groupId>javax</groupId> 
     <artifactId>javaee-web-api</artifactId> 
     <version>6.0</version> 
     <scope>provided</scope> 
    </dependency> 
    <dependency> 
     <groupId>org.primefaces</groupId> 
     <artifactId>primefaces</artifactId> 
     <version>3.3.1</version> 
    </dependency> 
</dependencies> 

<repositories> 
    <repository> 
     <id>prime-repo</id> 
     <name>PrimeFaces Maven Repository</name> 
     <url>http://repository.primefaces.org</url> 
     <layout>default</layout> 
    </repository> 
</repositories> 

<build> 
    <plugins> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-compiler-plugin</artifactId> 
      <version>2.3.2</version> 
      <configuration> 
       <source>1.6</source> 
       <target>1.6</target> 
       <compilerArguments> 
        <endorseddirs>${endorsed.dir}</endorseddirs> 
       </compilerArguments> 
      </configuration> 
     </plugin> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-war-plugin</artifactId> 
      <version>2.1.1</version> 
      <configuration> 
       <failOnMissingWebXml>false</failOnMissingWebXml> 
      </configuration> 
     </plugin> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-dependency-plugin</artifactId> 
      <version>2.1</version> 
      <executions> 
       <execution> 
        <phase>validate</phase> 
        <goals> 
         <goal>copy</goal> 
        </goals> 
        <configuration> 
         <outputDirectory>${endorsed.dir}</outputDirectory> 
         <silent>true</silent> 
         <artifactItems> 
          <artifactItem> 
           <groupId>javax</groupId> 
           <artifactId>javaee-endorsed-api</artifactId> 
           <version>6.0</version> 
           <type>jar</type> 
          </artifactItem> 
         </artifactItems> 
        </configuration> 
       </execution> 
      </executions> 
     </plugin> 
    </plugins> 
</build> 

的web.xml

<?xml version="1.0" encoding="UTF-8"?> 
<web-app version="3.0" 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_3_0.xsd"> 
    <context-param> 
     <param-name>javax.faces.PROJECT_STAGE</param-name> 
     <param-value>Development</param-value> 
    </context-param> 
    <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> 
    <session-config> 
     <session-timeout> 
      30 
     </session-timeout> 
    </session-config> 
    <welcome-file-list> 
     <welcome-file>faces/index.xhtml</welcome-file> 
    </welcome-file-list> 
</web-app> 

的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://java.sun.com/jsf/html" 
     xmlns:p="http://primefaces.org/ui"> 
    <h:head> 
     <title>Facelet Title</title> 
    </h:head> 
    <h:body> 
     <p:spinner /> 
    </h:body> 
</html> 

这是第一个场景。第二种情况是,我已经有了一个NetBeans Web应用程序项目,可以运行PrimeFaces。 “index.html”确实呈现。但是当我创建一个新的JSF页面并包含PrimeFaces命名空间时,xmlns:p="http://primefaces.org/ui",但是这个特定的JSF和其他新创建的JSF页面将不会呈现。

必须是我失踪的东西,但我不知道是什么。

我的环境是如下:

  • JDK6
  • Netbeans的7.1.2
  • PrimeFaces 3.3
  • 阿帕奇7.0.2
  • 视窗7(32位)

谢谢。

回答

6

由于您使用的是/index.xhtml作为欢迎文件,因此您还应该将FacesServlet映射到该扩展。

如果您不需要现有的前缀映射,取代由:

<servlet-mapping> 
    <servlet-name>Faces Servlet</servlet-name> 
    <url-pattern>*.xhtml</url-pattern> 
</servlet-mapping> 

否则只需添加*.xhtml模式意味着你结了:

<servlet-mapping> 
    <servlet-name>Faces Servlet</servlet-name> 
    <url-pattern>*.xhtml</url-pattern> 
    <url-pattern>/faces/*</url-pattern> 
</servlet-mapping> 

请注意,您几乎总是希望在那里映射*.xhtml以防止Facelets的源代码暴露给公众。

更新:

关于.jsf和.xhtml的区别:

.jsf是默认的映射之一(如果你不声明FacesServlet的所有在JSF 2.1,你”除了其他之外)。它源于磁盘上物理文件的扩展名(.jsp或.xhtml)与URL中使用的扩展名之间的差异。

不幸的是,这些历史上有所不同,因为JSF是一种附加技术,必须通过单独的显式Servlet(Faces Servlet)。纯JSP从来没有这种限制,因为它是更多的内置。 JSF页面首先仅在JSP中创建,所以如果您只是在URL请求中使用.jsp,容器将直接转到JSP并跳过Faces Servlet。

因此,必须为此发明一种解决方法,即将Faces Servlet映射到*.jsf,然后Faces Servlet将指向JSP文件,该文件在磁盘上仍具有扩展.jsp

个人而言,我认为简单的*.xhtml*.xhtml映射是唯一理智的开箱即用选项,但是由于向后兼容,JSF似乎无法将其设置为默认值。

+0

说真的,我几天前尝试过,它不起作用。或者我想。但现在它确实如此。 :D –

1

添加另一个servlet的映射:

<servlet-mapping> 
    <servlet-name>Faces Servlet</servlet-name> 
    <url-pattern>*.jsf</url-pattern> 
</servlet-mapping> 

之后使用以下URL:HTTP:// [HOST]:[PORT]/[WEBAPP] /面/索引。 jsf (。jsf and NOT .xhtml)。

+0

这是混淆了我的一部分。 .jsf和.xhtml有什么区别?我看到的大多数示例都使用.xhtml,并且在创建JSF页面时,NetBeans只允许使用选项创建使用.xhtml或“JSP文件”的“Facelets”。 –

+0

请勿重命名您的文件。只需添加映射。通过在Url中使用.jsf,Faces Servlet将使用相同的名称呈现.xhtml文件。 –

2

尽量把primefaces.jar文件下的WebContent/WEB-INF/lib目录 那么这个jar添加到构建路径

+0

这为我工作。谢谢 – jbakirov