Distribuir componentes Java Server Faces

Referencia:

https://www.logicbig.com/tutorials/java-ee-tutorial/jsf/custom-component-basic.html

Pasos:

Crear un proyecto EJB

nombre del proyecto

Server: No seleccionar

Definir Componente

  • Crear la clase HelloComponent.java

  • tagName es el nombre del componente

  • namespace es el que usaremos en el .xhtml

  • metodo encodeBegin() es donde generaremos el código html de respuesta

package com.avbravo.avbravojsf;

import java.io.IOException;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.time.format.FormatStyle;
import javax.faces.component.FacesComponent;
import javax.faces.component.UIComponentBase;
import javax.faces.context.FacesContext;
import javax.faces.context.ResponseWriter;

/**
 *
 * @author avbravo
 */
@FacesComponent(createTag = true, tagName = "helloComponent", namespace = "http://avbravo.com/tags")
public class HelloComponent extends UIComponentBase {
  @Override
  public String getFamily() {
      return "Greeting";
  }

  @Override
  public void encodeBegin(FacesContext context) throws IOException {
      String message = (String) getAttributes().get("message");
      LocalDateTime time = (LocalDateTime) getAttributes().get("time");
      String formattedTime = time.format(
              DateTimeFormatter.ofLocalizedDateTime(FormatStyle.MEDIUM));

      ResponseWriter writer = context.getResponseWriter();
      writer.startElement("p", this);
      writer.write("Message: " + message);
      writer.endElement("p");

      writer.startElement("p", this);
      writer.write("Time: " + formattedTime);
      writer.endElement("p");
  }
}

Generar el .jar

jar

Crear un nuevo proyecto web

Agregar la dependencia

pom.xml

  <dependency>
            <groupId>${project.groupId}</groupId>
            <artifactId>avbravojsf</artifactId>
            <version>0.1</version>
        </dependency>

En la pagina .xhtml

agregar

  xmlns:avbravojsf="http://avbravo.com/tags"

Quedaria

<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html>
<ui:composition template="/layout/template.xhtml" 
                xmlns="http://www.w3.org/1999/xhtml"
                xmlns:h="http://java.sun.com/jsf/html"
                xmlns:f="http://java.sun.com/jsf/core"
                xmlns:b="http://bootsfaces.net/ui"
                xmlns:ui="http://java.sun.com/jsf/facelets"
                xmlns:p="http://primefaces.org/ui"
                xmlns:avbravojsf="http://avbravo.com/tags"
                xmlns:a="http://xmlns.jcp.org/jsf/composite/avbravo"
                xmlns:e="http://xmlns.jcp.org/jsf/composite/extensions"
                xmlns:extensionviaje="http://xmlns.jcp.org/jsf/composite/extensionviaje">

Usarlo

<avbravojsf:helloComponent message="#{helloBean.message}" time="#{helloBean.time}"/>

Controller

import java.time.LocalDateTime;
import java.util.Date;
import javax.inject.Named;
import javax.enterprise.context.RequestScoped;

/**
 *
 * @author avbravo
 */
@Named(value = "helloBean")
@RequestScoped
public class HelloBean {
private String id;
private Date date;
    /**
     * Creates a new instance of HelloBean
     */
    public HelloBean() {
    }
    public String getMessage() {
      return "Hi there!";
  }

  public LocalDateTime getTime() {
      return LocalDateTime.now();
  }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public Date getDate() {
        return date;
    }

    public void setDate(Date date) {
        this.date = date;
    }


}

genera

Last updated