Introducción
Hay algunos proveedores de productos o fabricantes que necesitan crear un código de barras para poder ofrecer sus productos,la idea es crear un generador de código barras dinámico en los estandar que ofrece primefaces y que se pueda imprimir.Requisitos
- eclipse
- primefaces
- java 1.8
- tomcat 8.5
Desarrollo
Para iniciar el desarrollo de nuestro generador de código de barras. Abrimos nuestro eclipse y creamos un proyecto maven.File->New->MavenProjectSeleccionamos en Create a simple project y presionamos Next
LLenamos los siguientes campos:
- Group Id: mx.com.tutosoftware.genbarcode
- Artifact Id: genbarcode
- Packaging: war
- Name: GenBarCode
Una vez generado nuestro proyecto maven nos vamos al archivo pom.xml y pegamos el siguiente código esta para poder compilar con java 1.8.
<build> <plugins> <plugin> <artifactId>maven-compiler-plugin</artifactId> <version>3.3</version> <configuration> <source>1.8</source> <target>1.8</target> </configuration> </plugin> </plugins> </build>
Nos marcara un error que no encuentra el archivo web.xml pero lo solucionaremos de la siguiente manera, hacemos clic derecho en el proyecto y selecionamos Properties
Selecionamos Project Facets en el recuadro seleccionamos Dynamic Web Module 3.1 y Java Server Faces 2.2 y presionamos Apply posterriormente OK
Creamos una carpeta en src/main/webapp llamada WEB-INF.Nota:Si tienes eclipse 2019 te genera el archivo web.xml modificalo por el que esta en el código y luego maven->Update Project...
En el directorio WEB-INF creamos el archivo web.xml y escribimos lo siguiente:
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5"> <display-name>genbarcode</display-name> <context-param> <param-name>javax.faces.PROJECT_STAGE</param-name> <param-value>Development</param-value> </context-param> <context-param> <param-name>primefaces.THEME</param-name> <param-value>home</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>/faces/*</url-pattern> </servlet-mapping> <session-config> <session-timeout>30</session-timeout> </session-config> <welcome-file-list> <welcome-file>faces/index.xhtml</welcome-file> </welcome-file-list> </web-app>
<?xml version="1.0" encoding="UTF-8"?> <faces-config xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-facesconfig_2_2.xsd" version="2.2"> </faces-config>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>mx.com.tutosoftware.genbarcode</groupId> <artifactId>genbarcode</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>war</packaging> <name>GenBarCode</name> <repositories> <repository> <id>prime-repo</id> <name>PrimeFaces Maven Repository</name> <url>http://repository.primefaces.org/</url> <layout>default</layout> </repository> </repositories> <dependencies> <dependency> <groupId>com.sun.faces</groupId> <artifactId>jsf-api</artifactId> <version>2.2.10</version> </dependency> <dependency> <groupId>com.sun.faces</groupId> <artifactId>jsf-impl</artifactId> <version>2.2.10</version> </dependency> <!-- http://repo1.maven.org/maven --> <dependency> <groupId>javax.servlet</groupId> <artifactId>jstl</artifactId> <version>1.2</version> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>servlet-api</artifactId> <version>2.5</version> <scope>provided</scope> </dependency> <dependency> <groupId>javax.servlet.jsp</groupId> <artifactId>jsp-api</artifactId> <version>2.1</version> <scope>provided</scope> </dependency> <dependency> <groupId>com.sun.el</groupId> <artifactId>el-ri</artifactId> <version>1.0</version> </dependency> <dependency> <groupId>javax</groupId> <artifactId>javaee-web-api</artifactId> <version>7.0</version> <scope>provided</scope> </dependency> <dependency> <groupId>org.primefaces</groupId> <artifactId>primefaces</artifactId> <version>7.0</version> </dependency> <dependency> <groupId>org.primefaces.themes</groupId> <artifactId>all-themes</artifactId> <version>1.0.10</version> </dependency> <!-- https://mvnrepository.com/artifact/com.lowagie/itext --> <dependency> <groupId>com.lowagie</groupId> <artifactId>itext</artifactId> <version>2.1.7</version> </dependency> <!-- https://mvnrepository.com/artifact/org.apache.poi/poi --> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>3.17</version> </dependency> <dependency> <groupId>net.glxn</groupId> <artifactId>qrgen</artifactId> <version>1.4</version> </dependency> <dependency> <groupId>net.sf.barcode4j</groupId> <artifactId>barcode4j-light</artifactId> <version>2.1</version> </dependency> </dependencies> <build> <plugins> <plugin> <artifactId>maven-compiler-plugin</artifactId> <version>3.3</version> <configuration> <source>1.8</source> <target>1.8</target> </configuration> </plugin> </plugins> </build> </project>
En el paquete mx.com.tutosoftware.genbarcode.bean creamos la clase BarCodeBean esta clase es la que genera el datatable dinámico de nuestro reporte y escribimos:
package mx.com.tutosoftware.genbarcode.bean; import java.io.Serializable; import javax.annotation.PostConstruct; import javax.faces.application.FacesMessage; import javax.faces.bean.ManagedBean; import javax.faces.context.FacesContext; import javax.faces.view.ViewScoped; import org.primefaces.event.CloseEvent; import org.primefaces.event.DashboardReorderEvent; import org.primefaces.event.ToggleEvent; import org.primefaces.model.DashboardColumn; import org.primefaces.model.DashboardModel; import org.primefaces.model.DefaultDashboardColumn; import org.primefaces.model.DefaultDashboardModel; @ManagedBean @ViewScoped public class BarCodeBean implements Serializable { /** * */ private static final long serialVersionUID = 1L; private DashboardModel model; private String codebar; private String code; private String codeUpca; private String codeUpce; @PostConstruct public void init() { model = new DefaultDashboardModel(); DashboardColumn column1 = new DefaultDashboardColumn(); DashboardColumn column2 = new DefaultDashboardColumn(); DashboardColumn column3 = new DefaultDashboardColumn(); column1.addWidget("formatos"); column2.addWidget("upca"); column3.addWidget("upce"); model.addColumn(column1); model.addColumn(column2); model.addColumn(column3); } public void handleReorder(DashboardReorderEvent event) { FacesMessage message = new FacesMessage(); message.setSeverity(FacesMessage.SEVERITY_INFO); message.setSummary("Reordered: " + event.getWidgetId()); message.setDetail("Item index: " + event.getItemIndex() + ", Column index: " + event.getColumnIndex() + ", Sender index: " + event.getSenderColumnIndex()); addMessage(message); } public void handleClose(CloseEvent event) { FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_INFO, "Panel Closed", "Closed panel id:'" + event.getComponent().getId() + "'"); addMessage(message); } public void handleToggle(ToggleEvent event) { FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_INFO, event.getComponent().getId() + " toggled", "Status:" + event.getVisibility().name()); addMessage(message); } private void addMessage(FacesMessage message) { FacesContext.getCurrentInstance().addMessage(null, message); } public DashboardModel getModel() { return model; } public String getCodebar() { return codebar; } public void setCodebar(String codebar) { this.codebar = codebar; } public String getCode() { return code; } public void setCode(String code) { this.code = code; } public String getCodeUpca() { return codeUpca; } public void setCodeUpca(String codeUpca) { this.codeUpca = codeUpca; } public String getCodeUpce() { return codeUpce; } public void setCodeUpce(String codeUpce) { this.codeUpce = codeUpce; } }