viernes, 19 de junio de 2020

Java Server Faces - DataTable

Las tablas de HTML en una aplicación web con Java Server Faces se construye mediante la etiqueta h:dataTable en los Facelets.

Los datos que se pueden mostrar mediante un h:dataTable son:
  • Arrays
  • Instancias del Java Colletion Framework
  • Instancias de java.sql.ResultSet
  • Instancias de javax.servlet.jsp.jstl.sql.Result
  • Instancias de javax.faces.model.DataModel

Supongamos el siguiente bean llamado "LibroBean":
  1. package proyectoJSF.model;
  2. import java.time.LocalDate;
  3. import java.util.ArrayList;
  4. import java.util.List;
  5. import java.util.Map;
  6. import java.util.TreeMap;
  7. import javax.enterprise.context.RequestScoped;
  8. import javax.inject.Named;
  9. @Named
  10. @RequestScoped
  11. public class LibroBean {
  12. private Integer id = 105;
  13. private String nombre = "JSF EL";
  14. private AutorBean autor = new AutorBean();
  15. private String[] idiomas = { "Español", "Inglés", "italiano" };
  16. private List<String> paises;
  17. private Map<String, LocalDate> ediciones;
  18. public LibroBean() {
  19. cargarPaises();
  20. cargarEdiciones();
  21. }
  22. public String[] getIdiomas() {
  23. return idiomas;
  24. }
  25. public List<String> getPaises() {
  26. return paises;
  27. }
  28. public Map<String, LocalDate> getEdiciones() {
  29. return ediciones;
  30. }
  31. private void cargarPaises() {
  32. paises = new ArrayList<>();
  33. paises.add("Perú");
  34. paises.add("Canadá");
  35. paises.add("Japón");
  36. }
  37. private void cargarEdiciones() {
  38. ediciones = new TreeMap<>();
  39. ediciones.put("Primera", LocalDate.of(2012, 12, 30));
  40. ediciones.put("Segunda", LocalDate.of(2015, 2, 12));
  41. ediciones.put("Tercera", LocalDate.of(2020, 6, 7));
  42. }
  43. public Integer getId() {
  44. return id;
  45. }
  46. public void setId(Integer id) {
  47. this.id = id;
  48. }
  49. public String getNombre() {
  50. return nombre;
  51. }
  52. public void setNombre(String nombre) {
  53. this.nombre = nombre;
  54. }
  55. public AutorBean getAutor() {
  56. return autor;
  57. }
  58. public void setAutor(AutorBean autor) {
  59. this.autor = autor;
  60. }
  61. }


Se aprecia que contiene diversas estructuras de datos, vamos a mostrar la estructura MAP mediante un h:dataTable de la siguiente manera:
  1. <!DOCTYPE html>
  2. <html lang="en" xmlns="http://www.w3.org/1999/xhtml"
  3. xmlns:h="http://xmlns.jcp.org/jsf/html"
  4. xmlns:f="http://java.sun.com/jsf/core">
  5. <h:head>
  6. <title>Prueba 04 - DataTable</title>
  7. </h:head>
  8. <h:body>
  9. <h1>Ediciones de los libros</h1>
  10. <h:dataTable value="#{libroBean.ediciones}" var="edicion" border="1">
  11. <h:column>
  12. <f:facet name="header">
  13. Edición
  14. </f:facet>
  15. <h:outputText value="#{edicion.key}" />
  16. </h:column>
  17. <h:column>
  18. <f:facet name="header">
  19. Fecha de publicación (aaaa/mm/dd)
  20. </f:facet>
  21. <h:outputText value="#{edicion.value}" />
  22. </h:column>
  23. </h:dataTable>
  24. </h:body>
  25. </html>


Tenemos las siguientes etiqeutas y sus atributos:
  • h:dataTable, se convierte posteriormente en una tabla HTML
    • value, es el atributo cuyo valor es el que se itera dentro de la tabla
    • var, es el nombre de la variable que usaremos dentro de la estructura
    • border, similar a la propiedad "border" de una tabla HTML
  • h:column, en contraste con HTML no es necesario definir las filas, se hacen directamente las columnas. Dentro tendremos:
    • f:facet name="header", dentro de esta etiqueta con este "name" se coloca el texto que irá en dicha columna.
    • h:outputText value="#{edicion.key}", tendremos una etiqueta de texto que mostrará la clave de cada elemento del MAP
    • h:outputText value="#{edicion.value}", tendremos una etiqueta de texto que mostrará el valor de cada elemento del MAP

El resultado visual sería:
Edición Fecha de publicación (aaaa/mm/dd)
Primera 2012-12-30
Segunda 2015-02-12
Tercera 2020-06-07


No hay comentarios:

Publicar un comentario