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
Was this helpful?