CATEGORÍA

En el siguiente artículo se explicará como fue implementado el código del caso CATEGORÍA de la funcionalidad Formulario Para la implementación de esta funcionalidad se usó JavaEE con Prime Faces 6.0, además se usa el método GET para el envío de datos entre la plataforma web Verifíquese Cédula Almacén y la plataforma móvil Verifíquese Cédula Premium, antes de comenzar se debe descargar la base de datos y montarla en un motor de MySQL.

El siguiente código pertenece al formulario:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
      xmlns:h="http://xmlns.jcp.org/jsf/html"
      xmlns:f="http://xmlns.jcp.org/jsf/core"
      xmlns:p="http://primefaces.org/ui">

    <ui:composition template="/template2.xhtml">
        <ui:define name="title" >
            <h:outputText></h:outputText>
        </ui:define>
        <ui:define name="body">
            <h:panelGroup id="messagePanel" layout="block">
                <h:messages errorStyle="color: red" infoStyle="color: green" layout="table"/>
            </h:panelGroup>
            <f:metadata>
                <f:event type="preRenderView" listener="#{categoryController.loadparameters()}"/>
            </f:metadata>
            <h:form>
                  <p:panelGrid columns="2">
                    <f:facet name="header">
                        <h:outputText value="Categoría" />
                    </f:facet>
                    <p:column style="width: 50%">
                        <h:outputText style="font-size: 24px" value="Categoría" /> 
                    </p:column>
                    <p:column style="width: 50%">
                        <h:outputText style="width: 50%; font-size: 24px" value="#{categoryController.categoryResponse}" />
                    </p:column>
                    <p:column style="width: 50%">
                        <h:outputText  style="font-size: 24px" value="Extra" /> 
                    </p:column>
                    <p:column style="width: 50%">
                        <h:outputText style="width: 50%; font-size: 24px" value="#{categoryController.extraResponse}" />
                    </p:column>
                </p:panelGrid>
                <br/>
                <p:panelGrid columns="2">
                    <f:facet name="header">
                        <h:outputText value="Información" />
                    </f:facet>
                    <h:outputText value="Nombre" />
                    <h:outputText value="#{categoryController.nameComplete}" />
                    <h:outputText value="País" />
                    <h:outputText value="#{categoryController.country}" />
                    <h:outputText value="Tipo Documento" />
                    <h:outputText value="#{categoryController.documentType}" />
                    <h:outputText value="Numero Documento" />
                    <h:outputText value="#{categoryController.citizenID}" />
                    <h:outputText value="Fecha Nacimiento" />
                    <h:outputText value="#{categoryController.birthDate}" />
                    <h:outputText value="Fecha de Creación" />
                    <h:outputText value="#{categoryController.readingDate}" />
                    <h:outputText value="Latitud" />
                    <h:outputText value="#{categoryController.latitud}" />
                    <h:outputText value="Logitud" />
                    <h:outputText value="#{categoryController.longitud}" />
                    <h:outputText value="Información Extra" />
                    <h:outputText value="#{categoryController.extra_data}" />
                </p:panelGrid>
                <br/><br/>
             
                <br/>
                <h:commandButton  type="submit" title="Aceptar" action="#{categoryController.redirect('ViewCategory')}" style="padding: 10px 20px 10px 20px" value="Aceptar" >
                </h:commandButton>
            </h:form>
        </ui:define>
    </ui:composition>

</html>

En este formulario se muestra la información escaneada del documento y además se busca a cual categoría pertenece el documento para realizar esta trabajo se usa el siguiente fragmento de código en el controlador:

        public void loadparameters() throws UnsupportedEncodingException {
        //Este método es el encargado de recibir los datos leídos del documento por GET
        ExternalContext context=FacesContext.getCurrentInstance().getExternalContext();
        context.setResponseCharacterEncoding("UTF-8");
        Map<String, String> params = context.getRequestParameterMap();
        firstName = params.get("orh");
        secondName = params.get("bdh");
        firstSurname = params.get("wso");
        secondSurname = params.get("pur");
        citizenID = params.get("gel");
        birthDate = params.get("poe");
        country = params.get("wad");
        documentType = params.get("qwe");
        readingDate = params.get("tyu");
        latitud = params.get("klz");
        longitud = params.get("sde");
        extra_data = params.get("xlq");
        Categories c = this.documentcategoryFacade.findCategory(country, documentType, citizenID);
        if(c != null){
            this.setCategoryResponse(c.getNameCategory());
            this.setExtraResponse(c.getExtra());
        }else{
            this.setCategoryResponse("No tiene categoría");
            this.setExtraResponse("No tiene categoría");
        }
    }

En el Facade se usa el siguiente método para buscar la información de la categoría que pertenece al documento.

    public Categories findCategory(String country, String documentType, String documentNumber){
        //Este método se encarga de buscar la información de la categoría a la que pertenece el documento escaneado
        //Si el documento pertenece a una categoría se retorna un objeto de tipo Categories con la información de la categoría a la que pertenece el documento
        Categories c = null;
        Query q = getEntityManager().createQuery("SELECT d FROM Documentcategory d WHERE d.country = :country AND d.documentType = :documentType AND d.citizenId = :documentNumber");
        q.setParameter("country", country);
        q.setParameter("documentType", documentType);
        q.setParameter("documentNumber", documentNumber);
        List<Documentcategory> result=q.getResultList();
        if (result != null) {
                if (result.size() > 0) {
                    c = result.get(0).getCategory();
                }
            }
        return c;
   }



Al presionar el botón Aceptar se envían los datos del formulario a la aplicación móvil Verifíquese Cédula Premium usando el método GET, para esto se usa el siguiente fragmento de código en el controlador:

    public String redirect(String page) {
        //Se envían los datos como parámetros en la URL
                String url = page + "?faces-redirect=true&orh="+
                firstName+"&bdh="+secondName+"&wso="+firstSurname+"&pur="+
                secondSurname+"&gel="+citizenID+"&poe="+birthDate+"&wad="+country+"&qwe="+
                documentType+"&tyu="+readingDate+"&klz="+latitud+"&sde="+
                longitud+"&category="+categoryResponse+"&xlq="+extra_data;
        return url;
    }