2012-07-04 18 views
5

Nel mio progetto di maven, ho creato un file "index.xhtml". Quando ho creato e eseguito il progetto, il browser Web non ha mostrato nulla. Quando visualizzo il codice sorgente, potrei comunque vedere il codice sorgente, invece dei normali tag html.PrimeFaces Non Rendering

Ho provato a generare il file XHTML da:

  1. La selezione del progetto, fare clic destro e selezionare Nuovo .. Altro .. e selezionare la categoria "Web" e quindi JSF pagina.
  2. Selezionando il progetto, fare clic con il tasto destro del mouse su Nuovo .. e selezionare Altro .. e selezionare la categoria "Facce JavaServer" e poi la Pagina JSF.
  3. Selezionando il progetto, fare clic con il tasto destro del mouse su Nuovo .. e selezionare Altro .. e selezionare "Altro" e quindi Pagina XHTML.

Nessuno dei metodi sopra indicati ha funzionato.

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> 

Questo è il primo scenario. Il secondo scenario, ho già un progetto di applicazione Web NetBeans che funziona correttamente con PrimeFaces. Il "index.html" ha reso il rendering. Ma quando ho creato una nuova pagina JSF e incluso lo spazio dei nomi PrimeFaces, xmlns:p="http://primefaces.org/ui", questo particolare JSF e altre pagine JSF appena create non verranno renderizzate.

Deve essere qualcosa che mi manca, ma non so cosa.

Il mio ambiente è il seguente:

  • JDK6
  • Netbeans 7.1.2
  • primefaces 3.3
  • Apache 7.0.2
  • Windows 7 (32-bit)

Grazie.

risposta

6

Poiché si sta utilizzando /index.xhtml come file di benvenuto, è necessario associare anche FacesServlet a tale estensione.

Se non è necessario il mapping prefisso esistente, sostituire tale da:

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

Altrimenti basta aggiungere il modello *.xhtml significa che ritroverete con:

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

Si noti che è quasi sempre vogliono il mapping *.xhtml per evitare di esporre al pubblico il codice sorgente delle facce.

Aggiornamento:

circa la differenza tra JSF e .xhtml:

.jsf è una delle mappature di default (se non si dichiara il FacesServlet a tutti in JSF 2.1, è' Otterremo questo tra gli altri). Deriva dalla differenza tra l'estensione del file fisico sul disco (.jsp o .xhtml) e l'estensione utilizzata nell'URL.

Sfortunatamente questi erano storicamente diversi poiché JSF era una sorta di tecnica aggiuntiva che doveva passare attraverso un servlet esplicito separato (il servlet di Faces). Pure JSP non aveva mai questa limitazione poiché era più built-in. Le pagine JSF sono state create inizialmente in JSP, quindi se hai appena usato .jsp nelle richieste URL, il contenitore passerà direttamente a JSP e salterà il servlet Faces.

Quindi una soluzione doveva essere inventata per questo, e che è stato per mappare la Servlet Facce da *.jsf, e poi la Faces Servlet avrebbe diretto al file JSP, che aveva ancora l'estensione .jsp su disco.

Personalmente penso che una semplice mappatura *.xhtml a *.xhtml sia l'unica opzione normale, ma a causa della compatibilità con le versioni precedenti sembra che JSF non possa più impostarlo come predefinito.

+0

Seriamente, ci ho provato qualche giorno fa e non ha funzionato. O così ho pensato. Ma ora lo fa. : D –

1

Aggiungere un'altra servlet-mapping:

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

Dopo di che utilizzare il seguente URL: http: // [HOST]: [PORT]/[webapp]/affronta/index. jsf (. jsf e NON .xhtml).

+0

Questa è la parte che mi confonde. Qual è la differenza tra .jsf e .xhtml? La maggior parte degli esempi che vedo utilizza .xhtml e quando si crea una pagina JSF, NetBeans consente solo le opzioni per creare "Facelets" che utilizza .xhtml o "File JSP". –

+0

Non rinominare i file. Basta aggiungere la mappatura. Usando .jsf nell'URL, il Servlet di Faces sta rendendo il file .xhtml con lo stesso nome. –

2

cercano di mettere il file primefaces.jar sotto WebContent/WEB-INF/lib quindi aggiungere questo barattolo al percorso di generazione

+0

questo ha funzionato per me. grazie – jbakirov