2012-07-04 19 views
5

W moim projekcie maven, stworzyłem plik "index.xhtml". Kiedy zbudowałem i uruchomiłem projekt, przeglądarka nie pokazała niczego. Gdy wyświetlam źródło, nadal widzę kod źródłowy zamiast zwykłych tagów HTML.PrimeFaces Not Rendering

Próbowałem tworzenia pliku XHTML przez:

  1. Wybór projektu, kliknij prawym przyciskiem myszy i wybierz Nowy .. Inne .. i wybrać kategorię „Web”, a następnie JSF stronę.
  2. Wybierz projekt, kliknij prawym przyciskiem myszy Nowy .. i wybierz Inne .. i wybierz kategorię "JavaServer Faces", a następnie JSF Page.
  3. Wybierz projekt, kliknij prawym przyciskiem Nowy ... i wybierz Inne .. i wybierz kategorię "Inne", a następnie XHTML.

Żadna z powyższych metod nie zadziałała.

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> 

To pierwszy scenariusz. Drugi scenariusz, mam już projekt NetBeans Web Application, który działa poprawnie z PrimeFaces. Wyrenderował "index.html". Ale kiedy utworzyłem nową stronę JSF i zawarłem obszar nazw PrimeFaces, xmlns:p="http://primefaces.org/ui", Ale ten konkretny JSF i inne nowo utworzone strony JSF nie będą renderować.

To musi być coś, czego mi brakuje, ale nie wiem co.

Moje środowisko jest jak poniżej:

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

Dzięki.

Odpowiedz

6

Ponieważ używasz /index.xhtml jako pliku powitalnego, powinieneś również zmapować FaceServlet na to rozszerzenie.

Jeśli nie trzeba istniejącego odwzorowania przedrostka, że ​​zastąpienie przez:

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

W przeciwnym razie po prostu dodać wzór *.xhtml oznaczającego będziesz skończyć z:

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

pamiętać, że prawie zawsze chce się tam mapować, aby nie wystawiać publicznie kodu źródłowego Facetów.

Aktualizacja:

O różnicy między .jsf i .xhtml:

.jsf jest jednym z domyślnych odwzorowań (jeśli nie deklarują FacesServlet w ogóle w JSF 2.1, ty” Zdobędę to między innymi). Wynika to z różnicy między rozszerzeniem pliku fizycznego na dysku (.jsp lub .xhtml) a rozszerzeniem użytym w adresie URL.

Niestety, różniły się one historycznie, ponieważ JSF był rodzajem dodatkowej techniki, która musiała przejść przez oddzielny jawny Servlet (serwlety Faces). Poważny JSP nigdy nie miał tego ograniczenia, ponieważ był bardziej wbudowany. Strony JSF były najpierw tworzone tylko na stronie JSP, więc jeśli użyłeś .jsp w żądaniach URL, kontener przejdzie bezpośrednio do strony JSP i pominie serwlet Faces.

Aby to obejść, trzeba było znaleźć sposób na obejście tego problemu, który polegał na odwzorowaniu serwletu Faces na numer *.jsf, a następnie serwer Faces służyłby do pliku JSP, który nadal miał rozszerzenie .jsp na dysku.

Osobiście myślę prosty *.xhtml do *.xhtml mapowanie to jedyny rozsądny out-of-the-box opcja, ale ze względu na kompatybilność wsteczną wydaje JSF nie można ustawić jako domyślny to już.

+0

Poważnie, próbowałem to kilka dni temu i nie zadziałało. Tak przynajmniej myślałem. Ale teraz tak jest. : D –

1

Dodaj kolejny servlet-mapping:

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

Następnie kliknąć na poniższy link: http: // [HOST]: [port]/[webapp]/twarzy/indeks. jsf (. jsf i NOT .xhtml).

+0

Jest to część, która mnie dezorientuje. Jaka jest różnica między .jsf a .xhtml? Większość przykładów, które widzę, wykorzystuje .xhtml, a kiedy tworzysz stronę JSF, NetBeans pozwala tylko na opcje tworzenia "Facetów", które używają .xhtml lub "Plików JSP". –

+0

Nie zmieniaj nazw plików. Po prostu dodaj mapowanie. Za pomocą .jsf w Url Servlet Faces renderuje plik .xhtml o tej samej nazwie. –

2

spróbować umieścić plik primefaces.jar pod WebContent/WEB-INF/lib następnie dodać ten słoik do ścieżki budowania

+0

to działało dla mnie. Dziękuję Ci – jbakirov