In my maven project, I created an "index.xhtml" file. When I built and ran the project, the web browser didn't show anything. When I view source, I could still see the source code, instead of the normal html tags.
I have tried creating the XHTML file by:
- Selecting the project, right-click New.. and select Other.. and select "Web" category and then JSF Page.
- Selecting the project, right-click New.. and select Other.. and select "JavaServer Faces" category and then JSF Page.
- Selecting the project, right-click New.. and select Other.. and select "Other" category and then XHTML Page.
None of the methods above worked.
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>
That's the first scenario. The second scenario, I already have a NetBeans Web Application project running ok with PrimeFaces. The "index.html" did render. But when I created a new JSF page and included the PrimeFaces namespace, xmlns:p="http://primefaces.org/ui"
, But this particular JSF and other newly created JSF page won't render.
Must be something which I am missing, but I do not know what.
My environment is as below:
- JDK6
- Netbeans 7.1.2
- PrimeFaces 3.3
- Apache 7.0.2
- Windows 7 (32-bit)
Thanks.
Add another servlet-mapping:
After that use the following Url: http://[HOST]:[PORT]/[WEBAPP]/faces/index.jsf (.jsf and NOT .xhtml).
Since you're using
/index.xhtml
as the welcome file, you should also have mapped the FacesServlet to that extension.If you don't need the existing prefix mapping, replace that by:
Otherwise just add the
*.xhtml
pattern meaning you'll end up with:Note that you nearly always want the
*.xhtml
mapping there in order to prevent exposing the source code of your Facelets to the public.Update:
About the difference between .jsf and .xhtml:
.jsf
is one of the default mappings (if you don't declare the FacesServlet at all in JSF 2.1, you'll get this among others). It stems from the difference between the extension the physical file on disk has (.jsp or .xhtml) and the extension used in the URL.Unfortunately these were historically different since JSF was a kind of add-on technique that had to go via a separate explicit Servlet (the Faces Servlet).Pure JSP never had this limitation since it was more build-in. JSF pages were authored only in JSP at first, so if you just used .jsp in your URL requests, the container would go directly to JSP and skip the Faces Servlet.
So a workaround had to be invented for this, and that was to map the Faces Servlet to
*.jsf
, and then the Faces Servlet would direct to the JSP file, which still had the extension.jsp
on disk.Personally I think a simple
*.xhtml
to*.xhtml
mapping is the only sane out-of-the-box option, but due to backwards compatibility it seems JSF can not set this as a default anymore.try to put the primefaces.jar file under WebContent/WEB-INF/lib then add this jar to the build path