miércoles, 10 de junio de 2020

JSF con Eclipse

Se requiere tener instalados o configurados los siguientes componentes:


Al final tendremos un proyecto Maven de JSF 2.3 con JPA 2.2, Servlets versión 4, JDK 1.8 y Java EE 8

Primer paso: crear un proyecto web dinámico Maven

Crear un nuevo proyecto como se muestra


Seleccionar la opción Maven y luego Maven Project como se muestra


Configurar el proyecto con las siguientes especificaciones


Elegir el Group Id y Artifact Id de su preferencia. Seleccionar la opción war para indicar que se trata de un proyecto Web


Finalmente se obtendrá un proyecto con la siguiente estructura:



Segundo paso: Modificar el archivo pom.xml

El archivo pom.xml se debe modificar de la siguiente manera para indicar la versión 4 de los Servlets, el JDK 1.8 y la versión 8 de Java EE:

  1. <project xmlns="http://maven.apache.org/POM/4.0.0"
  2. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
  4. http://maven.apache.org/xsd/maven-4.0.0.xsd">
  5. <modelVersion>4.0.0</modelVersion>
  6. <groupId>com.jsf</groupId>
  7. <artifactId>proyectoJSF</artifactId>
  8. <version>0.0.1-SNAPSHOT</version>
  9. <packaging>war</packaging>
  10. <properties>
  11. <project.build.sourceEncoding>
  12. UTF-8
  13. </project.build.sourceEncoding>
  14. <project.reporting.outputEncoding>
  15. UTF-8
  16. </project.reporting.outputEncoding>
  17. <maven.compiler.source>1.8</maven.compiler.source>
  18. <maven.compiler.target>1.8</maven.compiler.target>
  19. <failOnMissingWebXml>false</failOnMissingWebXml>
  20. </properties>
  21. <dependencies>
  22. <dependency>
  23. <groupId>javax</groupId>
  24. <artifactId>javaee-api</artifactId>
  25. <version>8.0</version>
  26. <scope>provided</scope>
  27. </dependency>
  28. </dependencies>
  29. </project>

El proyecto se actualizará.


Tercer paso: Configurar el proyecto

Vamos a la opción propiedades haciendo clic derecho sobre el nombre del proyecto y buscamos la opción Project Facets y modificamos los checkbox dela siguiente manera:



Las versiones de JSF y JPA se modificarán manualmente, pero debemos hacer clic en "Further configuration required..." para realizar los siguientes cambios:



Esto provocará que se genere un archivo XML llamado "persistence.xml", pero usualmente en un lugar incorrecto y debemos modificar su ubicación de "src/main/java" a "src/main/resources". Además, de agregar y/o modificar tres archivos XML más llamados "beans.xml", "web.xml" y "faces-config.xml" dentro de la carpeta WEB-INF


El archivo web.xml se debe modificar de la siguiente manera:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3. xmlns="http://java.sun.com/xml/ns/javaee"
  4. xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
  5. http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
  6. version="4.0">
  7. <display-name>proyectoJSF</display-name>
  8. <servlet>
  9. <servlet-name>facesServlet</servlet-name>
  10. <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
  11. <load-on-startup>1</load-on-startup>
  12. </servlet>
  13. <servlet-mapping>
  14. <servlet-name>facesServlet</servlet-name>
  15. <url-pattern>*.xhtml</url-pattern>
  16. </servlet-mapping>
  17. </web-app>


El archivo faces-config.xml se debe modificar de la siguiente manera:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <faces-config xmlns="http://xmlns.jcp.org/xml/ns/javaee"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
  5. http://xmlns.jcp.org/xml/ns/javaee/web-facesconfig_2_3.xsd"
  6. version="2.3">
  7. </faces-config>


El archivo persistence.xml se debe modificar de la siguiente manera para indicar la versión 2.2 de JPA:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <persistence xmlns="http://xmlns.jcp.org/xml/ns/persistence"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence
  5. http://xmlns.jcp.org/xml/ns/persistence/persistence_2_2.xsd"
  6. version="2.2">
  7. <persistence-unit name="proyectoJSF">
  8. </persistence-unit>
  9. </persistence>


El archivo beans.xml se debe modificar de la siguiente manera:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://xmlns.jcp.org/xml/ns/javaee"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
  5. http://xmlns.jcp.org/xml/ns/javaee/beans_2_0.xsd"
  6. version="2.0" bean-discovery-mode="annotated">
  7. </beans>


Opcionalmente podemos desactivar la validación del JPA para que no se muestre un error en "persistence.xml". Para ello, vamos a las propiedades, luego a "Validation" y realizamos las siguientes modificaciones.


Cuarto paso: crear un Bean y un XHTML

Se ha creado un proyecto que sigue el patrón de diseño MVC donde el controlador es el archivo "web.xml", para tener la vista enlazada a un Bean, crearemos un nuevo paquete llamado: "proyectoJSF/view" y dentro crearemos un nuevo Bean con la herramienta CDI instalada previamente.



Modificamos el código del Bean creado por:

  1. package proyectoJSF.view;
  2. import javax.enterprise.context.RequestScoped;
  3. import javax.inject.Named;
  4. @Named
  5. @RequestScoped
  6. public class SaludoView {
  7. private String input;
  8. private String output;
  9. public void submit() {
  10. output = "Hola estimado " + input;
  11. }
  12. public String getInput() {
  13. return input;
  14. }
  15. public void setInput(String input) {
  16. this.input = input;
  17. }
  18. public String getOutput() {
  19. return output;
  20. }
  21. }


En la carpeta webapp crearemos dos archivos: "index.html" y "prueba1.xhtml" con los siguientes códigos:
  • index.html
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6. <title>Proyecto Demo de JSF</title>
  7. </head>
  8. <body>
  9. <h1>Probando JSF</h1>
  10. <hr />
  11. <a href="prueba1.xhtml">Prueba #1</a>
  12. </body>
  13. </html>

  • prueba1.xhtml
  1. <!DOCTYPE html>
  2. <html lang="en" xmlns="http://www.w3.org/1999/xhtml"
  3. xmlns:f="http://xmlns.jcp.org/jsf/core"
  4. xmlns:h="http://xmlns.jcp.org/jsf/html">
  5. <h:head>
  6. <title>Prueba 01</title>
  7. </h:head>
  8. <h:body>
  9. <h1>Saludando</h1>
  10. <h:form>
  11. <h:outputLabel for="input" value="Input" />
  12. <h:inputText id="input" value="#{saludoView.input}" />
  13. <h:commandButton value="Submit" action="#{saludoView.submit}">
  14. <f:ajax execute="@form" render=":output" />
  15. </h:commandButton>
  16. </h:form>
  17. <h:outputText id="output" value="#{saludoView.output}" />
  18. </h:body>
  19. </html>


Tendremos la siguiente estructura en el proyecto:


Quinto paso: Iniciar el proyecto

Debemos agregar el proyecto al servidor una vez que se encuentre activo como se indica:


Luego debe quedar así


Una vez ejecutado el proyecto debemos ir al enlace de prueba #1 e introducir un nombre para ver la respuesta de la página



No hay comentarios:

Publicar un comentario