2012-07-04 4 views
5

В моем проекте maven я создал файл index.xhtml. Когда я построил и запустил проект, веб-браузер ничего не показывал. Когда я просматриваю исходный код, я все еще вижу исходный код вместо обычных тэгов html.PrimeFaces Not Rendering

Я попытался создать файл XHTML с помощью:

  1. Выбор проекта, щелкните правой кнопкой мыши Создать .. и выберите Другой .. и выберите категорию «Web», а затем JSF страницу.
  2. При выборе проекта щелкните правой кнопкой мыши New .. и выберите Other .. и выберите категорию JavaServer Faces, а затем страницу JSF.
  3. При выборе проекта щелкните правой кнопкой мыши New .. и выберите Other .. и выберите категорию «Other», а затем страницу XHTML.

Ни один из вышеперечисленных методов не работал.

Maven ПОМ

<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, который работает с PrimeFaces. «Index.html» сделал визуализацию. Но когда я создал новую страницу JSF и включил пространство имен PrimeFaces, xmlns:p="http://primefaces.org/ui", но эта конкретная JSF и другая вновь созданная страница JSF не будут отображаться.

Должно быть, что-то, чего мне не хватает, но я не знаю что.

Моя среда, как показано ниже:

  • JDK6
  • Netbeans 7.1.2
  • PrimeFaces 3.3
  • Apache 7.0.2
  • Windows 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.

Update:

О разнице между .jsf и .xhtml:

.jsf является одним из отображений по умолчанию (если вы не объявлять FacesServlet вообще в JSF 2.1, вы» сделаю это среди других). Это связано с различием между расширением физического файла на диске (.jsp или .xhtml) и расширением, используемым в URL-адресе.

К сожалению, они были исторически различны, поскольку JSF был своего рода дополнительным методом, который должен был проходить через отдельный явный сервлет (сервлетом Faces). У PSP JSP никогда не было этого ограничения, поскольку он был более встроенным. Сначала страницы JSF были созданы только в JSP, поэтому, если вы только что использовали .jsp в ваших запросах URL-адресов, контейнер перейдет непосредственно в JSP и пропустит Servlet Faces.

Так обходной путь должен был быть изобретен для этого, и это было сопоставить Faces Servlet к *.jsf, а затем Faces Servlet бы направить в файл JSP, который до сих пор имел расширение .jsp на диске.

Лично я думаю, что простое сопоставление *.xhtml - *.xhtml является единственным стандартным исходным кодом, но из-за обратной совместимости кажется, что JSF больше не может устанавливать это как значение по умолчанию.

+0

Серьезно, я попробовал это несколько дней назад, и это не сработало. Или так я думал. Но теперь это так. : D –

1

Добавить другой сервлет-отображение:

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

После этого используйте следующий URL: HTTP: // [HOST]: [PORT]/[WebAPP]/лица/индекс. jsf (. jsf и NOT .xhtml).

+0

Это та часть, которая меня смущает. В чем разница между .jsf и .xhtml? Большинство примеров, которые я вижу, использует .xhtml, и когда вы создаете страницу JSF, NetBeans разрешает только опции «Facelets», которые используют .xhtml или «JSP Files». –

+0

Не переименовывайте свои файлы. Просто добавьте отображение. Используя .jsf в Url, Servlets Faces передает файл .xhtml с тем же именем. –

2

попробовать поставить primefaces.jar файл под WebContent/WEB-INF/Lib затем добавить эту банку в путь сборки

+0

это сработало для меня. Спасибо – jbakirov