trucosjakartaee
  • Introduction
  • Creditos
  • Jar to Exe
  • Primefaces security
  • Primefaces Responsive
  • Leer archivos en una linea de codigo
  • Logger Crear archivo JSOn
  • Cifrar Archivos y Licencias
    • Cifrar Archivos y Encriptar Textos
    • Licencias
  • JSON-P Leer arhivos
  • Apache Derby
  • Migrar a Java 11
  • jmoordbjsf
    • 1. Controller
      • 1.1 Definicion
      • 1.2 before/after()
      • 1.3 Parametros internos
      • 1.2 init()
        • 1.2.1 Obtener el action en el init()
        • 1.2.3 Asignar el search en el init()
      • 1.3 searchBy()
      • 1.4 <jmoordbjsf:search>
      • 1.5<jmoordbjsf:searchBetweenDate> Busquedas entre fechas.
        • 1.5.1 <jmoordbjsf:searchBetweenDates con <jmoordbjsf:autocomplete>
      • 1.6 handleSelect de autocomplete en list.xhtml
      • 1.7 <p:selectOneMenu> eventos en list.xhtml
      • 1.8 move()
    • 2. Componentes
      • 2.1 <jmoordbjsf:ccstimeline>
      • 2.2 <jmoordbjsf:paginator>
        • 2.2.1 paginator con impresion
    • 3. Historial de revisión
  • Reportes
    • OpenPDF
      • Enlaces
      • Introduccion
      • Reportes con ReportUtils.java
      • Reporte con ReportUtils y <jmoordbjsf:paginator>
      • Turoriales
      • Informe con 6 columnas
      • Tamaño de pagina
      • Centrar en el reporte
      • Margenes
      • Fuentes en las celdas
      • Formatear Fechas
      • Imagenes
      • grupos
      • subreportes
      • firmar pdf
      • Agregar autor al pdf
      • Reporte simple
    • iReport
    • Imprimir condicional
    • DynamicReports
    • iText
    • PDFBox
    • JaspertReport from code
    • Nerval Reports
    • DynamicJasper
    • Eclipse birt
  • Overview
    • jmoordb web
      • Autoincrementable
        • Autoincrementable
        • Generar autoincrementable para múltiples tiendas relacionadas sin @Referenced
        • Login
          • Login simple
          • Login con Multiples roles
          • Obtener el Ip del cliente
          • Generar el UUID
          • Session Expirada redirigir automaticamente
        • Password
          • Cambiar password
          • Encriptar password
        • Usuario
          • Usuario con un solo Rol
          • Usuario con multiples roles
    • JavaEE
      • Java Security EE
        • Validar paginas
      • Email
        • Enviar emails formateados
        • CompletableFuture para envio de emails
        • Emails con copias cc, bcc
      • JPA
        • <p:autocomplete> con JPA
        • <p:autocomplete> JPA con eventos
        • <p:autocomplete> JPA con Integer
        • <p:autocomplete> JPA con scroll
        • <p:autocomplete> con Converter
    • Java Server Faces
      • eliminar bordes de <p:fieldSet>
      • reset
      • commandButton verdes
      • JsfUtil.updateJSFComponent(componente)
      • <p:growl> Centrado
      • <p:fieldSet>
      • Actualizar componente primefaces desde codigo Java
      • Codigo barra/QR
        • codigosbarra
        • Generar/Leer Codigo QR
        • Scanner un codigo QR con primefaces
      • Barra de progreso y bloqueo para procesos muy largos
      • Dialogo
        • Centrar Dialog
        • Cerrar dialogo desde código
        • Invocar dialogo desde codigo
        • dialogconfirm
        • Cambiar los colores del Dialog
        • Modal
        • Dialogo con <p:schedule>
      • Menu
        • <b:navCommandLink/>
        • Eventos de menu
        • CommandLink con parametros en menu
        • Usar <b:flyOutMenu>
        • Menus dinámicos mediante <p:repeat
        • Filtrar desde el menu dinamico
      • Message
        • Cerrar automaticamente messages
      • inputText
        • inputTextArea Scroll
        • Bloquear tecla Enter inputText
        • Validar rangos
        • Convertir a mayusculas
        • eventos en el inputText
      • outputLabel
        • Mostrar un icono en un outputLabel
      • selectOneMenu
        • <b:selectOneMenu String
        • <b:selectOneMenu> eventos Ajax
        • <p:selectOneMenu eventos
        • <b:selectOneMenu sin converter
        • concatenar String
        • <f:selectItem>
        • <b:selectOneMenu relacionados
        • <b:selectOneMenu> simple
        • <b:selectOneMenu> formulario view.xhtml
        • mesSelectOneMenu
        • Ajustar el tamaño
      • Datatable
        • DataTable Agrupados y rowExpansion
        • Saber que columna se edita
        • tamaño de columnas
        • Marcar como vistos
        • <p:datatable> con <p:autocomplete>
        • <p:repeat> con dataTable
        • <p:repeat> en un componente
        • <p:datatable> con exporter
        • Mostrar un datatable dentro de un dialogo
        • Filas coloreadas
        • Reflexion para contar valores en un datatable
        • Datatable con paginacion
        • <p:datatable> expandableRowGroups
        • <p:datatable> columnas agrupadas
        • color columna
        • <b:datatable> con dialogs
        • Busquedas
        • <b:datatable> con colores en las filas
        • <b:datatable> filtrado por el Agente seleccionado
        • <b:datatable> Filtrado por el usuario logueado
        • <b:dataTable con repeat para atributos List<>
      • Autocomplete
        • autocomplete insertar nuevos valores
        • Componente autocomplete
        • Autocomplete con findRegex() Expresiones Regulares
        • <p:autocomplete> multiple
        • Autocomplete con findText
        • Autocomplete relacionados
        • <p:autocomplete> con Integer y String
        • Autocomplete con dropdwon
        • Autocomplete con minQueryLength=
        • Autocomplete Relacionados con dropdown (Provincia- distrito)
        • Cambiar color <p:autocomplete>
        • <p:autocomplete> Multiples relacionados
        • <p:autocomplete Usuarios por multiples Roles
        • <p:autocomplete> Multiples dropdown="true" relacionados con
        • <p:autocomplete> con lambda stream
        • Autocomplete
        • Con Rangos de fechas
          • Autocomplete con rangos de fechas excluyendo el registro actual
      • Iconos e imagenes
        • <p:commandLink> con imagenes
        • <p:commandButton> con imagenes
        • <h:graphicImage>
      • Paso de parametros
        • Desde un <p:commandLink>
        • Desde un <p:button>
      • Ajax
        • Eventos
        • Eventos al cargar pagina
      • Datagrid
        • Quitar bordes con poseidon
        • <p:datagrid>
      • Tabs
        • Diseñar tabs
      • Notificaciones
        • Notificaciones
        • Notificaciones en la barra
      • Graficas
        • <p:chart> pie
        • <p:char> pie por varios atributos
      • Ommifaces
        • Untitled
        • Ejecutar Comando
    • Formatos y Fechas
      • Formatear fechas y horas en un String para un datatable
      • Formatear decimales
      • Formatear fecha
      • Formateo de fechas y horas por separado
      • outputLabel formateado
    • Fechas
      • Primer/Ultimo dia en fechas del mes
      • Insertar horas minutos y segundos a una fecha
      • validarRangoFechas
      • Determinar el numero de meses entre fechas
      • Descomponener una fecha
      • Obtener el nombre del dia
      • Calcular dias entre fechas
      • Operaciones con fechas
      • Filtrar por dias Atrasados
      • Fecha actual
      • Primer dia y ultimo dia del mes de la fecha actual
      • Sumar mes a fecha actual
      • Fechas null
      • Conocer si alguien esta de vacaciones
      • Formatear una fecha
      • Si cumple años
      • Filtrar cumpleaños en JPA
      • <a:searchBetweenDate> Filtrar entre Fechas
      • Mostrar los que estan de vacaciones en un mes
      • Calcular numero de días de vacaciones del mes
      • Comparar Fechas
      • Mostrar fecha y hora en un datatable
      • Validar que la Hora no sea cero
      • F iltrar entre fechas de un List<Entity>
      • Búsquedas por Día filterDayWithoutHour()
      • Validar fechas y horas
      • Validar meses superiores en Cierre
      • Primera y ultima fecha del Mes
      • <p:calendar>
        • eventos-en-el-pcalendar
        • Eventos en el <p:calendar> /EntreFechas
        • Eventos en el <p:calendar> entre fechas
      • HoraMinutos formato AM/PM de una fecha
        • Google Calendar
    • Rangos de Fechas
      • Encontrar si esta disponible entre dos fechas en rangos de fechas inicial y final con filtro adicion
      • Buscar una fecha y hora en un rango
      • Actualizar las fechas en rango de dos fechas y validar los disponibles excluyendo el entity actual
      • filterBetweenDatePaginationWithoutHour()Buscar en rangos de fechas excluyendo la hora con paginacion
    • Generales
      • Habilitar Empty
    • Mongodb
      • Combinar bases de datos
      • Referencias en bases datos distintas
      • Crear bases de datos en tiempo de ejecucion
      • Agregar campos autoincrementables, renombrar campos
      • Transacciones
    • Controller
      • Filtrar desde el list.xhtml
      • ChoferController.java
      • ReservadoController.java
      • OrdenController.java
      • ModeloController.java
      • Validar null
    • Formularios
      • Relaciones con atributos no Referenciados
      • Maestro-Detalle Orden de Proveedor a Bodega
      • Dos campos como campo llave
      • Crear registros de entitys diferentes en el mismo formulario
      • Formulario con llave secundaria sin mostrar autoincrementable
      • Cambiar numero de cedula
      • Formulario referenciado (Grupoarticulo->Modelo)
      • Usuario
      • Facturas
        • Factura codigo xhtml
        • FacturaController.java
      • Maestro-Detalle Factura
      • Formulario sin componente new
      • Solo formulario new.xhtml no usar list.xhtml ni el view.xhtml
    • JmoordbLanguages
    • JmoordbResourcesFiles
      • Pasarlos a un services
    • list.xtml
      • Filtrar por un entity Referenciado
      • Formularios con Ordenacion
      • Filtrar por atributos referenciados
      • <a:searchYesNo>
    • Entity
    • Services
    • Blogs
      • Java
      • Mongodb
    • Glassfish
    • PDF
      • Download
    • Links
    • Ubuntu
      • Minimizar aplicaciones en Ubuntu con un solo clic
      • Maven
      • Reiniciar GnomeShell
    • Databases
      • Ranking
    • Tutoriales JavaEE 8
    • Busquedas en List<> Embebidos y Referenciados
      • Buscar en un List<> en cualquier posicion usando and y or
      • Buscar elemento en un List<> Embebido/Referenciado
      • Limpiar autocomplete y otros filtros
      • Filtrar embebidos referenciados de forma inversa
      • Buscar en un List<Viaje> dentro de Solicitud
    • Search
    • Eventos
      • Escuchar eventos
      • Eventos
    • Microservicios
      • Microservicios con Java EE Jakarta
    • Java
      • Copiar Beans
      • List
        • Ordenar una List Java 8
        • Filtrar un List<> con Stream
        • Encontrar un elemento en un List con Lambda/Stream
      • List<Object>
      • Método retorna List<Object>
      • Mock
        • Disenos online
      • Brownies Collections
      • Batch
      • Maven
        • Failed to execute goal org.apache.maven.plugins:maven-war-plugin:2.3:exploded (default-cli) on proje
      • NetBeans
        • Colapsar codigo
      • Formatear String
      • Lambda/Stream
      • Filtrar de varias listas
      • stream
      • lambda /stream
      • Patrones de Diseño
        • Builder Desing Pattern
    • Primefaces
      • PhotoCam
        • Tomar foto
      • Schedule
        • <p:scheduler> con paginacion
        • <p:schedule> LazyScheduleModel
        • <p:schedule> con filtros autocomplete
        • <p:schedule> con GMT-5 para Panama
        • <p:schedule> con dialogos
        • Colores en <p:schedule>
        • <p:schedule> con dialogos diferentes en el mismo evento
        • <p:schedule con <p:ajax event="viewChange">
        • <p:schedule> imprimir
      • Dashboard
        • Dashboard basico <p:knob
          • <p:knob>
          • Dashboard con link <p:knob
        • Dashboard <p:knob> <b:bagde>
        • Dashboard con Paneles
      • <p:chips>
        • <p:chips> simple
      • <p:dataGrid
    • Entity Configuración
    • Arquitectura
      • Project ejb
      • Proyecto Web
      • Pasos al crear un entity
      • list.xhtml
      • new.xhtml
      • view.xhtml
    • BitBucket/NetBeans
      • Crear Ramas desde Bitbucket
      • Crear rama desde NetBeans
      • Cambiar ramas desde NetBeans
      • Push a una rama
      • Permisos a una rama
      • Clonar una rama
      • Crear un pull request bitbucket
      • Recuperar una revisión git desde Bitbucket
    • Controller
      • Atributos
      • set/get
      • constructor
      • init
      • preRenderView
      • reset
      • prepare
      • showAll
      • isNew
      • save
      • edit
      • delete
      • deleteAll
      • print
      • printAll
      • handleSelect
      • handleAutocompleteOfListXhtml
      • last
      • first
      • next
      • back
      • skip
      • move
      • clear
      • searchBy(String string)
    • Componentes
      • JsfUtil.updateJsfComponent()
    • Genericos implementar en un Controller
    • LambdaMetaFactory
    • Patrones
    • @Producer Reducir Repository
  • Cierre Mensual
    • Cierre mensual
  • fontAwesome Local
    • fontAwesome Local
  • Componentes
    • Componentes JSF
      • <a:paginatorReport>
      • Distribuir componentes Java Server Faces
      • Crear composite distribuible con Maven
      • Clases como parámetros y métodos en el composite
      • Agregar css
  • LambdaMetaFactory
    • LambdaMetaFactory
      • <jmoordbjsf:Ajax Status>
      • Invocar metodos desde un controller
  • Patrones de Diseño
    • Patrones de Diseño
    • Builder
  • @Producer Reducir Repository
    • @Producer Reducir Repository
    • Validar en el inicio del controller con nuevo esquema
    • AdminFaces
      • include
      • template
      • resources
      • web.xml
    • Cargar archivo propiedades
    • Maven Crear arquetipo en base a un proyecto
      • Configurar path maven
      • archivo settings.xml
      • Crear arquetipo desde NetBeans
      • Crear el arquetipo desde consola
      • Crear el proyecto en base al arquetipo
      • Clonar adminfaces archetype
    • PayaraMicro
    • Archivos de propiedades con adminfaces
  • Web Socket
    • WebSocket
      • Web Socket
        • dependencias
        • web.xml
        • Archivos de configuracion
        • Pushsocket
        • index.xhtml
        • reciver.xhtml
        • Ejecutarlo
      • WebSocket en menu con <:remoteCommand>
        • top.xhtml
        • template.xhtml
        • web.xml
        • Clases
        • ConfigurationContoller.java
        • PushSocket.java
        • Mensajes.java
      • WebSocket con Notificaciones en bases de datos
        • pom.xml
        • web.xml
        • template.xthml
        • top.xhtml
        • index.xhtml
        • LoginController.java
        • PushSocket.java
        • JmoordbNotificationsController.java
        • list.xhtml
        • Enviar notificaciones todos los usuarios
    • Pagina de Inicio en Java EE
    • Control de Viajes
      • Generar pasajeros por viajes
        • validarRangoFechas
    • Vehiculos recomendados
  • DBUtils
  • Archivos Properties
  • MICROSERVICES
    • MICROSERVICES
      • Archivos properties con Producer
      • Archivos Properties con @Inject
Powered by GitBook
On this page
  • Formularios new.xhtml, view.xtml
  • En el list
  • Datos
  • new.xhtml
  • view.xhtml
  • Controller
  • Nota:

Was this helpful?

  1. Overview
  2. Formularios

Relaciones con atributos no Referenciados

PreviousFormulariosNextMaestro-Detalle Orden de Proveedor a Bodega

Last updated 6 years ago

Was this helpful?

Formularios new.xhtml, view.xtml

Al dar clic en Ganga ocultamos los otros autocomplete

Debe cumplir las condiciones:

  • No se pueden crear referencias a otros entitys, porque solo se podrá almacenar uno en un momento indicado. En el ejemplo el chofer esta asignado a una Bodega o una Ganga o una Tienda, no puede estar asignados a todas, por lo tanto no seria adecuado crear los @Referenced, ya que necesitariamos asignarle uno existente de cada entity que fuesemos a relacionar.

  • Podemos usar autocomplete con dropdown = true

  • Usamos un <b:flyOutMenu> para mostrar la lista correspondiente a cada entity que deseamos relacionar por los atributos.

  • Los autocomplete deben ser renderizados en base al atributo esbodega, esganga, estienda correspondiente.

  • En ese ejemplo se mostrara como relacionar Bodega o Ganga o Tienda, con Chofer mediante los atributos:

  • tipoalmacen que indicara si es bodega, tienda o ganga

  • idalmacen: almacena el valor del idbodega, idtienda o idganga.

  • En el controller creamos atributo para cada entity relacionado

     Tienda tienda = new Tienda();
    Bodega bodega = new Bodega();
    Ganga ganga = new Ganga();
  • Definimos atributos boolean

    private Boolean esbodega = false;
    private Boolean estienda = true;
    private Boolean esganga = false;
  • Crear el metodo public String onUbicacionChange(String almacen) para validar la seleccion del <b:flyOutMenu>

  • En el método save() validar si esbodega, esganga o estienda para asignar los valores correspondientes en los atributos: tipoalmacen, idalmacen.

  • Crear el mètodo public String nombreLugar(Chofer chofer) , para devolver el nombre correspondiente.

En el list

  • Invocar el metodo que devuelve el tipo y id correspondiente.

  <b:dataTableColumn value="#{choferController.nombreLugar(item)}" label="#{msg['field.ubicacion']}" />
 <b:dataTable value="#{choferController.choferDataModel}"
                             var="item"
                             id="dataTable2"
                             paginated="false"
                             onpage="console.log('page');">

                    <b:dataTableColumn value="#{item.idchofer}" label="#{msg['field.idchofer']}"/>
                    <b:dataTableColumn value="#{item.nombre}" label="#{msg['field.nombre']}" />

                  <b:dataTableColumn value="#{item.telefono}" label="#{msg['field.telefono']}" />
                    <b:dataTableColumn value="#{item.tipoalmacen}" label="#{msg['field.tipo']}" />
                   <b:dataTableColumn value="#{choferController.nombreLugar(item)}" label="#{msg['field.ubicacion']}" />

                    <b:dataTableColumn label="">

                        <a:column

                            edit="#{choferController.prepare('view',item)}"
                            delete="#{choferController.delete(item,false)}"
                            rendered="#{applicationMenu.chofer.delete}"
                            />
                    </b:dataTableColumn>

                </b:dataTable>

Entity

Datos

Se almacena en la siguiente estructura.

{

"idchofer":"7-8",
"nombre":"Juan",
"email":"@",
"telefono":"67373",
"porcentajecomision":5.0,
"direccion":"panama",
"tipoalmacen":"tienda",
"idtipoalmacen":"3",
"activo":"si",
"userInfo":[
        {
            "iduserinfo" : "20e5135d-cd31-4bd9-87a7-c02b59834bd3",
            "username" : "avbravo",
            "datetime" : ISODate("2018-05-16T02:32:47.133Z"),
            "description" : "create"
        }

    ]

new.xhtml

<p:outputLabel  value="#{msg['field.ubicacion']}" />

                        <b:flyOutMenu width="50px">  
                            <b:navCommandLink value="#{msg['field.tienda']}"   update=":form"  action="#{choferController.onUbicacionChange('tienda')}"/>
                            <b:navCommandLink value="#{msg['field.ganga']}" update=":form"  action="#{choferController.onUbicacionChange('ganga')}"  />
                            <b:navCommandLink value="#{msg['field.bodega']}" update=":form"  action="#{choferController.onUbicacionChange('bodega')}" />
                        </b:flyOutMenu>

                      <p:outputLabel value="#{msg['field.ganga']}" rendered="#{choferController.esganga}"/>

                        <e:autocompleteganga listener="#{tiendaController.handleSelect}"
                                             value="#{choferController.ganga}"
                                             rendered="#{choferController.esganga}"
                                             dropdown="true"
                                             id="ganga"
                                             itemLabel=" #{p.ganga}"
                                             field="ganga"

                                             />

                        <p:outputLabel  value="#{msg['field.bodega']}" rendered="#{choferController.esbodega}"/>

                        <e:autocompletebodega listener="#{choferController.handleSelect}"
                                              value="#{choferController.bodega}"
                                              rendered="#{choferController.esbodega}"
                                              dropdown="true"
                                              itemLabel=" #{p.idbodega}"
                                              field="idbodega"
                                              id="bodega"

                                              />


                        <p:outputLabel value="#{msg['field.tienda']}"/>
                        <e:autocompletetienda listener="#{choferController.handleSelect}"
                                              value="#{choferController.tienda}"
                                              dropdown="true"
                                              itemLabel=" #{p.tienda}"
                                              rendered="#{choferController.estienda}"
                                              field="tienda"
                                              id="tienda"

                                              />

view.xhtml

                        <p:outputLabel  value="#{msg['field.ubicacion']}" />

                        <b:flyOutMenu width="50px">  
                            <b:navCommandLink value="#{msg['field.tienda']}"   update=":form"  action="#{choferController.onUbicacionChange('tienda')}"/>
                            <b:navCommandLink value="#{msg['field.ganga']}"  update=":form"  action="#{choferController.onUbicacionChange('ganga')}"/>
                            <b:navCommandLink value="#{msg['field.bodega']}"  update=":form"  action="#{choferController.onUbicacionChange('bodega')}"/>
                        </b:flyOutMenu>

                        <p:outputLabel value="#{msg['field.ganga']}" rendered="#{choferController.esganga}"/>

                        <e:autocompleteganga listener="#{tiendaController.handleSelect}"
                                             value="#{choferController.ganga}"
                                             rendered="#{choferController.esganga}"
                                             dropdown="true"
                                             id="ganga"
                                             itemLabel=" #{p.ganga}"
                                             field="ganga"

                                             />

                        <p:outputLabel  value="#{msg['field.bodega']}" rendered="#{choferController.esbodega}"/>

                        <e:autocompletebodega listener="#{choferController.handleSelect}"
                                              value="#{choferController.bodega}"
                                              rendered="#{choferController.esbodega}"
                                              dropdown="true"
                                              itemLabel=" #{p.idbodega}"
                                              field="idbodega"
                                              id="bodega"

                                              />


                        <p:outputLabel value="#{msg['field.tienda']}"/>
                        <e:autocompletetienda listener="#{choferController.handleSelect}"
                                              value="#{choferController.tienda}"
                                              dropdown="true"
                                              itemLabel=" #{p.tienda}"
                                              rendered="#{choferController.estienda}"
                                              field="tienda"
                                              id="tienda"

                                              />

Controller

  • Definir atributos booleanos para cada entity

  • Definir objetos de cada entity

  • Inyectar los repository y services de los entitys de referencia

  • El metodo init() inicializar el false los atributos booleanos

  • Crear objetos nuevos

  • Validar en base al tipoalmacen para buscar el entity correspondiente

  • preprare() validar el tipoalmacen

  • save() validar tipoalmacen

  • edit() validar tipoalmacen

  • nombreLugar(Chofer chofer), devuelve el nombre del lugar

    private String passwordnewrepeat;
    private Boolean esbodega = false;
    private Boolean estienda = true;
    private Boolean esganga = false;

       Tienda tienda = new Tienda();
    Bodega bodega = new Bodega();
    Ganga ganga = new Ganga();
    @Inject
    TiendaRepository tiendaRepository;
    @Inject
    BodegaRepository bodegaRepository;
    @Inject
    GangaRepository gangaRepository;


      @Inject
    BodegaServices bodegaServices;

     @Inject
    TiendaServices tiendaServices;
    @Inject
    GangaServices gangaServices;

    @PostConstruct
    public void init() {
        try {
            esbodega = false;
            estienda = false;
            esganga = false;
            String action = loginController.get("chofer");
            String id = loginController.get("idchofer");
            String pageSession = loginController.get("pagechofer");
            //Search
            loginController.put("searchchofer", "_init");
            writable = false;

            choferList = new ArrayList<>();
            choferFiltered = new ArrayList<>();
            chofer = new Chofer();
            choferDataModel = new ChoferDataModel(choferList);
            tienda = new Tienda();
            ganga = new Ganga();
            bodega = new Bodega();

            if (id != null) {
                Optional<Chofer> optional = choferRepository.find("idchofer", id);
                if (optional.isPresent()) {
                    chofer = optional.get();
                    //   chofer.setPassword(JsfUtil.desencriptar(chofer.getIdchofer()));
                    estienda = false;
                    esbodega = false;
                    esganga = false;
                    switch (chofer.getTipoalmacen().toLowerCase()) {
                        case "tienda":
                            tienda = choferServices.findTienda(chofer);
                            estienda = true;
                            almacen = "tienda";
                            almacenLabel = "Tienda";
                            break;
                        case "bodega":
                            bodega = choferServices.findBodega(chofer);
                            esbodega = true;
                            almacenLabel = "Bodega";
                            almacen = "bodega";
                            break;
                        case "ganga":
                            almacenLabel = "Ganga";
                            almacen = "Ganga";
                            ganga = choferServices.findGanga(chofer);
                            esganga = true;
                            break;
                        default:
                            break;
                    }

                    choferSelected = chofer;
                    writable = true;

                }
            }
            if (action != null && action.equals("gonew")) {
                chofer = new Chofer();
                choferSelected = chofer;
                writable = false;

            }
            if (pageSession != null) {
                page = Integer.parseInt(pageSession);
            }
            Integer c = choferRepository.sizeOfPage(rowPage);
            page = page > c ? c : page;
            move();

        } catch (Exception e) {
            JsfUtil.errorMessage("init() " + e.getLocalizedMessage());
        }
    }



     @Override
    public String prepare(String action, Object... item) {
        String url = "";
        try {
            loginController.put("pagechofer", page.toString());
            loginController.put("chofer", action);
            switch (action) {
                case "new":
                    chofer = new Chofer();
                    choferSelected = new Chofer();

                    writable = false;
                    break;

                case "view":
                    if (item.length != 0) {
                        choferSelected = (Chofer) item[0];
                        chofer = choferSelected;
                        estienda = false;
                        esbodega = false;
                        esganga = false;
                        switch (chofer.getTipoalmacen().toLowerCase()) {
                            case "tienda":
                                tienda = choferServices.findTienda(chofer);
                                estienda = true;
                                break;
                            case "bodega":
                                bodega = choferServices.findBodega(chofer);
                                esbodega = true;
                                break;
                            case "ganga":
                                ganga = choferServices.findGanga(chofer);
                                esganga = true;
                                break;
                            default:
                                break;
                        }
                        loginController.put("idchofer", chofer.getIdchofer());
                    }

                    url = "/pages/chofer/view.xhtml";
                    break;
                case "golist":

                    url = "/pages/chofer/list.xhtml";
                    break;

                case "gonew":
                    url = "/pages/chofer/new.xhtml";
                    break;
            }

        } catch (Exception e) {
            JsfUtil.errorMessage("prepare() " + e.getLocalizedMessage());
        }

        return url;
    }


     @Override
    public String save() {
        try {
            Optional<Chofer> optional = choferRepository.findById(chofer);
            if (optional.isPresent()) {
                JsfUtil.warningMessage(rf.getAppMessage("warning.idexist"));
                return null;
            }

            if (estienda) {
                chofer.setTipoalmacen("tienda");
                chofer.setIdalmacen(tienda.getIdtienda());
            } else {
                if (esbodega) {
                    chofer.setTipoalmacen("bodega");
                    chofer.setIdalmacen(bodega.getIdbodega());

                } else {
                    if (esganga) {
                        chofer.setTipoalmacen("ganga");
                        chofer.setIdalmacen(ganga.getIdganga());
                    } else {
                        JsfUtil.warningMessage(rf.getMessage("warning.seleccioneubicacion"));
                        return "";
                    }

                }
            }

            chofer.setUserInfo(userInfoServices.generateListUserinfo(loginController.getUsername(), "create"));
            if (choferRepository.save(chofer)) {
                revisionHistoryStoreejbRepository.save(revisionHistoryServices.getRevisionHistory(chofer.getIdchofer(), loginController.getUsername(),
                        "create", "chofer", choferRepository.toDocument(chofer).toString()));
                JsfUtil.successMessage(rf.getAppMessage("info.save"));
                reset();
            } else {
                JsfUtil.successMessage("save() " + choferRepository.getException().toString());
            }

        } catch (Exception e) {
            JsfUtil.errorMessage("save()" + e.getLocalizedMessage());
        }
        return "";
    }    



    @Override
    public String edit() {
        try {
            // chofer.setPassword(JsfUtil.encriptar(chofer.getPassword()));
            if (estienda) {
                chofer.setTipoalmacen("tienda");
                chofer.setIdalmacen(tienda.getIdtienda());
            } else {
                if (esbodega) {
                    chofer.setTipoalmacen("bodega");
                    chofer.setIdalmacen(bodega.getIdbodega());

                } else {
                    if (esganga) {
                        chofer.setTipoalmacen("ganga");
                        chofer.setIdalmacen(ganga.getIdganga());
                    } else {
                        JsfUtil.warningMessage(rf.getMessage("warning.seleccioneubicacion"));
                        return "";
                    }

                }
            }
            chofer.getUserInfo().add(userInfoServices.generateUserinfo(loginController.getUsername(), "update"));

            //guarda el contenido anterior
            //guarda el contenido actualizado
            revisionHistoryStoreejbRepository.save(revisionHistoryServices.getRevisionHistory(chofer.getIdchofer(), loginController.getUsername(),
                    "update", "chofer", choferRepository.toDocument(chofer).toString()));

            choferRepository.update(chofer);
            JsfUtil.successMessage(rf.getAppMessage("info.update"));
        } catch (Exception e) {
            JsfUtil.errorMessage("edit()" + e.getLocalizedMessage());
        }
        return "";
    }



       public String nombreLugar(Chofer chofer) {
        String lugar = "";
        try {
            switch (chofer.getTipoalmacen().toLowerCase()) {
                case "tienda":
                    Tienda tienda = choferServices.findTienda(chofer);
                    lugar = tienda.getTienda();
                    break;
                case "bodega":
                    Bodega bodega = choferServices.findBodega(chofer);
                    lugar = bodega.getIdbodega();
                    break;
                case "ganga":
                    Ganga ganga = choferServices.findGanga(chofer);
                    lugar = ganga.getGanga();
                    break;
                default:
                    break;
            }
        } catch (Exception e) {
            JsfUtil.errorMessage("");
        }
        return lugar;
    }

Nota:

Ver ChoferController.java