usar titulos template paginas mkyong ejemplos define con como and jsf java-ee jsf-2 glassfish-3 web.xml

template - titulos con jsf



JSF 2.0 no representa ninguna página (1)

Soy un programador de Java EE que tiene problemas para configurar mi primera aplicación habilitada para "JSF 2.0". Estoy usando las siguientes tecnologías:

  • jdk1.6.0_24
  • MyEclipse 10.0
  • Glassfish 3.0.1
  • JSF 2.0

Problema: no pude encontrar la manera de analizar y analizar mi servidor y generar páginas JSF 2.0. Seguí varias guías, (notablemente de stackoverflow.com) sin éxito. Mis páginas de prueba no son renderizadas por Glassfish 3.0.1. Probé diferentes enfoques para arreglar mi código, incluyendo:

1 -> web.xml

1.1 -> encabezado editado que especifica los atributos HTML taglib de 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 - Servlet JSF definido y otras cosas

<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 -> Verificado muchas veces para verificar si la URL de solicitud utilizada coincide con el patrón url del 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 -> página de inicio

3.1.1 -> cabecera incluida que especifica atributos HTML taglib 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 - bibliotecas y dependencias

Comencé mi proyecto con el soporte de Maven 2.0. Este es mi archivo 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 - Resultados Glassfish

5.1 - Código 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 de la página mostrada por el navegador:

<!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>

No pude cargar una PANTALLA PRINCIPAL de lo que muestra el navegador, pero las etiquetas no se muestran.

Pregunta: ¿cuál fue mi error? ¿Qué se debe hacer para que el servidor de aplicaciones Glassfish represente correctamente las páginas habilitadas para JSF 2.0? Solo necesito una plantilla JSF 2.0 simple para configurar mi entorno de desarrollo y usarlo como punto de inicio de las aplicaciones JSF.

¡Gracias!


Al contrario de lo que dices, la página JSF se procesa correctamente. Según la respuesta HTTP obtenida, la salida HTML generada se ve bien. Todas las etiquetas JSF se analizan y procesan correctamente. Si JSF no representaba nada, entonces habría visto exactamente el código fuente JSF original en Ver código fuente .

Su problema concreto es que el navegador no muestra el HTML generado correctamente. Esto puede suceder cuando el encabezado Content-Type es incorrecto. El encabezado Content-Type le dice al navegador cómo interpretar el contenido. El comportamiento también depende del navegador. Si, por ejemplo, utilizas un <DOCTYPE html ...> con un Content-Type of application/xhtml+xml en el buscador de MSIE, entonces causarás estragos e incluso aparecerá un confuso diálogo de Guardar como .

En su caso, aunque no indicó claramente el problema, ni describió la respuesta real en detalle, ni mostró una captura de pantalla (aunque en un host diferente), creo que su problema concreto es que se muestra todo el HTML. con un Content-Type de Content-Type text/plain . Es decir, estás viendo literalmente todo el código fuente HTML como respuesta del navegador y lo malinterpretaste como "JSF no representa la respuesta" mientras que en realidad es tu navegador el que no procesó la fuente HTML generada por JSF en una representación visual.

El tipo de Content-Type correcto está establecido por defecto por la implementación JSF, pero puede ser anulado por el servidor o incluso un proxy (como Apache HTTPD) en el frente, o al especificarlo explícitamente en el código fuente JSF. No estoy seguro acerca de la causa exacta en su caso particular, pero lo siguiente debería obligar a JSF a enviar la respuesta explícitamente como text/html .

<f:view contentType="text/html"> Put at least h:body here. </f:view>

Puede examinar los encabezados de respuesta en cualquier herramienta moderna de depuración del navegador web. Por ejemplo, en Firebug:

Sin relación con el problema concreto, su asignación de FacesServlet debería ser más genérica que esta sola página, o puede tener problemas al utilizar recursos como javascripts de Ajax. Recomiendo *.xhtml . También recomiendo volver a hacer la configuración basada en un tutorial más decente. Puede encontrar buenos tutoriales en la parte inferior de nuestra página wiki de JSF .