Я начинающий программист на Java EE, у которого проблемы с настройкой моего первого приложения с поддержкой JSF 2.0. Я использую следующие технологии:
- jdk1.6.0_24
- MyEclipse 10.0
- Glassfish 3.0.1
- JSF 2.0
Проблема: Я не смог найти способ заставить мой сервер анализировать и отображать страницы JSF 2.0. Я следовал различным инструкциям (особенно от stackoverflow.com) без успеха. Мои тестовые страницы не отображаются Glassfish 3.0.1. Я пробовал разные подходы, чтобы исправить мой код, включая:
1 -> web.xml
1.1 -> отредактированный заголовок, задающий атрибуты HTML taglib JFS 2.0 (..)
<?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">
1.2 - Определенный сервлет JSF и другие вещи
<welcome-file-list>
<welcome-file>index.html</welcome-file>
</welcome-file-list>
<context-param>
<param-name>com.sun.faces.expressionFactory</param-name>
<param-value>com.sun.el.ExpressionFactoryImpl</param-value>
</context-param>
<context-param>
<param-name>javax.faces.PROJECT_STAGE</param-name>
<param-value>Development</param-value>
</context-param>
<context-param>
<param-name>javax.faces.DEFAULT_SUFFIX</param-name>
<param-value>.xhtml</param-value>
</context-param>
<context-param>
<param-name>javax.faces.FACELETS_SKIP_COMMENTS</param-name>
<param-value>true</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>/register.xhtml</url-pattern>
</servlet-mapping>
2 -> Проверено много раз, чтобы проверить, соответствует ли используемый URL-адрес URL-шаблону FacesServlet.
**Target page** (url was not typed in browser . . . ): register.xhtml
**URL Pattern:**
<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>/register.xhtml</url-pattern>
</servlet-mapping>
3 -> домашняя страница
3.1.1 -> включает заголовок, задающий атрибуты HTML-тега JFS 2.0 (..)
<!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:f="http://java.sun.com/jsf/core">
4 - библиотеки и зависимости
Начал мой проект с поддержкой Maven 2.0. Это мой файл pom.xml:
<?xml version="1.0"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd"
xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<modelVersion>4.0.0</modelVersion>
<groupId>JSF2.0_Template_1</groupId>
<artifactId>JSF2.0_Template_1</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>
<name></name>
<description></description>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>com.sun.el</groupId>
<artifactId>el-ri</artifactId>
<version>1.0</version>
</dependency>
<dependency>
<groupId>org.glassfish</groupId>
<artifactId>bean-validator</artifactId>
<version>3.0-JBoss-4.0.2</version>
</dependency>
<dependency>
<groupId>org.glassfish</groupId>
<artifactId>javax.annotation</artifactId>
<version>3.0.1</version>
</dependency>
<dependency>
<groupId>org.glassfish</groupId>
<artifactId>javax.ejb</artifactId>
<version>3.0.1</version>
</dependency>
<dependency>
<groupId>org.glassfish</groupId>
<artifactId>javax.enterprise.deploy</artifactId>
<version>3.0.1</version>
</dependency>
<dependency>
<groupId>org.glassfish</groupId>
<artifactId>javax.jms</artifactId>
<version>3.0.1</version>
</dependency>
<dependency>
<groupId>org.glassfish</groupId>
<artifactId>javax.management.j2ee</artifactId>
<version>3.0.1</version>
</dependency>
<dependency>
<groupId>org.eclipse.persistence</groupId>
<artifactId>javax.persistence</artifactId>
<version>2.0.0</version>
</dependency>
<dependency>
<groupId>org.glassfish</groupId>
<artifactId>javax.resource</artifactId>
<version>3.0.1</version>
</dependency>
<dependency>
<groupId>org.glassfish</groupId>
<artifactId>javax.security.auth.message</artifactId>
<version>3.0.1</version>
</dependency>
<dependency>
<groupId>org.glassfish</groupId>
<artifactId>javax.security.jacc</artifactId>
<version>3.0.1</version>
</dependency>
<dependency>
<groupId>org.glassfish</groupId>
<artifactId>javax.servlet</artifactId>
<version>3.0.1</version>
</dependency>
<dependency>
<groupId>org.glassfish</groupId>
<artifactId>javax.servlet.jsp</artifactId>
<version>3.0.1</version>
</dependency>
<dependency>
<groupId>org.glassfish</groupId>
<artifactId>javax.servlet.jsp.jstl</artifactId>
<version>3.0.1</version>
</dependency>
<dependency>
<groupId>org.glassfish</groupId>
<artifactId>javax.transaction</artifactId>
<version>3.0.1</version>
</dependency>
<dependency>
<groupId>javax.xml.bind</groupId>
<artifactId>jaxb-api-osgi</artifactId>
<version>2.2.1</version>
</dependency>
<dependency>
<groupId>javax.ws.rs</groupId>
<artifactId>jsr311-api</artifactId>
<version>1.1.1</version>
</dependency>
<dependency>
<groupId>org.glassfish.web</groupId>
<artifactId>jstl-impl</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>javax.mail</groupId>
<artifactId>mail</artifactId>
<version>1.4.3</version>
</dependency>
<dependency>
<groupId>javax.xml</groupId>
<artifactId>webservices-api-osgi</artifactId>
<version>2.0.1</version>
</dependency>
<dependency>
<groupId>org.jboss.weld</groupId>
<artifactId>weld-osgi-bundle</artifactId>
<version>1.0.1-SP3</version>
</dependency>
<dependency>
<groupId>com.sun.faces</groupId>
<artifactId>jsf-api</artifactId>
<version>2.0.3</version>
</dependency>
<dependency>
<groupId>com.sun.faces</groupId>
<artifactId>jsf-impl</artifactId>
<version>2.0.3</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<artifactId>maven-war-plugin</artifactId>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.6</source>
<target>1.6</target>
</configuration>
</plugin>
</plugins>
</build>
</project>
5 - Результаты Glassfish
5.1 - HTML JSF 2.0 Код:
<!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:f="http://java.sun.com/jsf/core">
<h:head>
<title>A Simple JavaServer Faces Registration Application</title>
</h:head>
<h:body>
<h:form>
<h2>JSF Registration App</h2>
<h4>Registration Form</h4>
<table>
<tr>
<td>First Name:</td>
<td>
<h:inputText label="First Name"
id="fname" value="#{userBean.firstName}"
required="true"/>
<h:message for="fname" />
</td>
</tr>
<tr>
<td>Last Name:</td>
<td>
<h:inputText label="Last Name"
id="lname" value="#{userBean.lastName}"
required="true"/>
<h:message for="lname" />
</td>
</tr>
<tr>
<td>Sex:</td>
<td>
<h:selectOneRadio label="Sex"
id="sex" value="#{userBean.sex}" required="true">
<f:selectItem itemLabel="Male" itemValue="male" />
<f:selectItem itemLabel="Female" itemValue="female" />
</h:selectOneRadio>
<h:message for="sex" />
</td>
</tr>
<tr>
<td>Date of Birth:</td>
<td>
<h:inputText label="Date of Birth"
id="dob" value="#{userBean.dob}" required="true">
<f:convertDateTime pattern="MM-dd-yy" />
</h:inputText> (mm-dd-yy)
<h:message for="dob" />
</td>
</tr>
<tr>
<td>Email Address:</td>
<td>
<h:inputText label="Email Address"
id="email" value="#{userBean.email}" required="true"
validator="#{userBean.validateEmail}"/>
<h:message for="email" />
</td>
</tr>
<tr>
<td>Service Level:</td>
<td>
<h:selectOneMenu label="Service Level"
value="#{userBean.serviceLevel}">
<f:selectItem itemLabel="Medium" itemValue="medium" />
<f:selectItem itemLabel="Basic" itemValue="basic" />
<f:selectItem itemLabel="Premium" itemValue="premium" />
</h:selectOneMenu>
</td>
</tr>
</table>
<p><h:commandButton value="Register" action="confirm" /></p>
</h:form>
</h:body>
</html>
5.2 - HTML страницы, отображаемой браузером:
<!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"><head>
<title>A Simple JavaServer Faces Registration Application</title></head><body>
<form id="j_idt6" name="j_idt6" method="post" action="/JSF2.0_Template/faces/register.xhtml;jsessionid=db8f214e61a90013726b072f83eb" enctype="application/x-www-form- urlencoded">
<input type="hidden" name="j_idt6" value="j_idt6" />
<h2>JSF Registration App</h2>
<h4>Registration Form</h4>
<table>
<tr>
<td>First Name:</td>
<td><input id="j_idt6:fname" type="text" name="j_idt6:fname" />
</td>
</tr>
<tr>
<td>Last Name:</td>
<td><input id="j_idt6:lname" type="text" name="j_idt6:lname" />
</td>
</tr>
<tr>
<td>Sex:</td>
<td><table id="j_idt6:sex">
<tr>
<td>
<input type="radio" name="j_idt6:sex" id="j_idt6:sex:0" value="male" /><label for="j_idt6:sex:0"> Male</label></td>
<td>
<input type="radio" name="j_idt6:sex" id="j_idt6:sex:1" value="female" /><label for="j_idt6:sex:1"> Female</label></td>
</tr>
</table>
</td>
</tr>
<tr>
<td>Date of Birth:</td>
<td><input id="j_idt6:dob" type="text" name="j_idt6:dob" /> (mm-dd-yy)
</td>
</tr>
<tr>
<td>Email Address:</td>
<td><input id="j_idt6:email" type="text" name="j_idt6:email" />
</td>
</tr>
<tr>
<td>Service Level:</td>
<td><select name="j_idt6:j_idt21" size="1"> <option value="medium" selected="selected">Medium</option>
<option value="basic">Basic</option>
<option value="premium">Premium</option>
</select>
</td>
</tr>
</table>
<p><input type="submit" name="j_idt6:j_idt26" value="Register" /></p><input type="hidden" name="javax.faces.ViewState" id="javax.faces.ViewState" value="-3247001945221977595:-4814431455900353505" autocomplete="off" />
</form></body>
</html>
Я не могу загрузить PRINTSCREEN из того, что показывается браузером, но теги не отображаются.
Вопрос: в чем была моя ошибка? Что нужно сделать, чтобы сервер приложений Glassfish правильно отображал страницы с поддержкой JSF 2.0? Мне просто нужен простой шаблон JSF 2.0 для настройки среды разработки и использования в качестве отправной точки приложений JSF.
Спасибо!