2012-07-04 23 views
5

En mi proyecto maven, creé un archivo "index.xhtml". Cuando construí y ejecuté el proyecto, el navegador web no mostró nada. Cuando veo la fuente, todavía puedo ver el código fuente, en lugar de las etiquetas html normales.PrimeFaces Not Rendering

He tratado de crear el archivo XHTML por:

  1. Selección del proyecto, haga clic en Nuevo y seleccione Otros .. .. y seleccione la categoría "Web" y luego JSF página.
  2. Al seleccionar el proyecto, haga clic con el botón derecho en Nuevo ... y seleccione Otro ... y seleccione la categoría "Caras de JavaServer" y luego la Página JSF.
  3. Al seleccionar el proyecto, haga clic con el botón derecho en Nuevo ... y seleccione Otro ... y seleccione "Otro" categoría y luego Página XHTML.

Ninguno de los métodos anteriores funcionó.

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> 

Ese es el primer escenario. El segundo escenario, ya tengo un proyecto de aplicación web NetBeans que funciona bien con PrimeFaces. El "index.html" sí se procesó. Pero cuando creé una nueva página JSF e incluí el espacio de nombre PrimeFaces, xmlns:p="http://primefaces.org/ui", pero esta JSF particular y otra página JSF recién creada no se representarán.

Debe ser algo que me falta, pero no sé qué.

Mi entorno es la siguiente:

  • JDK6
  • Netbeans 7.1.2
  • PrimeFaces 3.3
  • Apache 7.0.2
  • Windows 7 (32 bits)

Gracias.

Respuesta

6

Dado que está utilizando /index.xhtml como archivo de bienvenida, también debería haber asignado el FacesServlet a esa extensión.

Si usted no necesita la asignación de prefijo existente, sustituir ese por:

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

De lo contrario sólo tiene que añadir el patrón *.xhtml lo que significa que va a terminar con:

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

Tenga en cuenta que casi siempre quiere el mapeo *.xhtml allí para evitar exponer el código fuente de sus Facelets al público.

Actualización:

Sobre la diferencia entre .jsf y .xhtml:

.jsf es una de las asignaciones predeterminadas (si no se declara la FacesServlet en absoluto en JSF 2.1,' conseguiré esto entre otros). Se deriva de la diferencia entre la extensión que tiene el archivo físico en disco (.jsp o .xhtml) y la extensión utilizada en la URL.

Desafortunadamente, estos eran históricamente diferentes ya que JSF era una especie de técnica complementaria que tenía que pasar a través de un Servlet explícito aparte (el Servlet de Caras) .Pure JSP nunca tuvo esta limitación ya que era más incorporada. Las páginas JSF se crearon solo en JSP al principio, de modo que si acaba de usar .jsp en sus solicitudes de URL, el contenedor iría directamente a JSP y se saltaría el Servlet de Caras.

lo tanto, una solución tuvo que ser inventado para esto, y eso era para mapear el servlet Faces a *.jsf, y luego las caras servlet dirigiría al archivo JSP, que aún tenía la extensión .jsp en el disco.

personalmente creo que un simple *.xhtml-*.xhtml mapeo es la única opción sensata fuera de la caja, pero debido a la compatibilidad hacia atrás parece JSF no puede establecer esto como un defecto más.

+0

En serio, lo intenté hace unos días y no funcionó. O eso pensé. Pero ahora lo hace. : D –

1

Agregar otro servlet-mapping:

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

Después de que el uso de la siguiente URL: http: // [HOST]: [puerto]/[WEBAPP]/faces/index. jsf (. jsf y NO .xhtml).

+0

Esta es la parte que me confunde. ¿Cuál es la diferencia entre .jsf y .xhtml? La mayoría de los ejemplos que veo usan .xhtml y cuando creas una página JSF, NetBeans solo permite las opciones para crear "Facelets" que usa .xhtml o "JSP Files". –

+0

No cambie el nombre de sus archivos. Solo agrega el mapeo. Al usar .jsf en la Url, el Servlet de caras está representando el archivo .xhtml con el mismo nombre. –

2

tratar de poner el archivo primefaces.jar en/WEB-INF/lib WebContent luego agregar este frasco a la trayectoria de la estructura

+0

esto funcionó para mí. gracias – jbakirov