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
  • <p:datatable> con <p:autocomplete>
  • CODIGO COMPLETO ActividadesimpuestosSearchController.java

Was this helpful?

  1. Overview
  2. Java Server Faces
  3. Datatable

<p:datatable> con <p:autocomplete>

PreviousMarcar como vistosNext<p:repeat> con dataTable

Last updated 6 years ago

Was this helpful?

<p:datatable> con <p:autocomplete>

Datatable con autocomplete y botón agregar fila

Columnas editables

Habilitar la propiedad editable="true" editMode="cell" del datatable

Controlamos el evento cellEdit , en las columnas usamos

<p:cellEditor>  
   <p:ajax event="cellEdit" listener="#{actividadesimpuestosSearchController.onCellEdit}" update=":form:growl" />

Agregar el autocomplete

 <p:column>
    <f:facet name="header">
          <h:outputText value="#{msg.idnivel6}"/>
    </f:facet>

                                    <p:cellEditor>  
                                        <f:facet name="output">
                                            <h:outputText value="#{item.idnivel6.idnivel6}"/>
                                        </f:facet>  
                                        <f:facet name="input">
                      <p:autoComplete  scrollHeight="250"   dropdown="true"  size="45"  
                        value="#{item.idnivel6}"  
                       completeMethod="#{actividadesimpuestosSearchController.completeNivel6}"  
                                 var="p"  
                                itemLabel="#{p.idnivel6}" 
                                itemValue="#{p}" converter="nivel6Converter" forceSelection="true"> 

                        <p:ajax event="itemSelect" 
         listener="#{actividadesimpuestosSearchController.handleSelectNivel6(event,item.idnivel6)}" 
           update=":form,:form:growl" />  
                            <f:facet name="itemtip">
                              <h:panelGrid columns="2" cellpadding="5">
                                         <p:outputLabel value="#{msg.nombre}"/>

                                          <p:outputLabel value="#{p.nombre}" />
                                     <p:outputLabel value="#{msg.valor}"/>
                                        <p:outputLabel value="#{p.valor}" />
                                        <p:outputLabel value="#{msg.desde}"/>
                                        <p:outputLabel value="#{p.minimo} #{msg.a} #{p.maximo}" />
                                        <p:outputLabel value="#{msg.nivel5}"/>

                                       <p:outputLabel value="#{p.idnivel5.nombre}" />
                             </h:panelGrid>
                           </f:facet>
                      </p:autoComplete> 
                   </f:facet>  
           </p:cellEditor>  

  </p:column>

Una columna editable para el valor

 <p:column>
                                    <f:facet name="header">
                                        <h:outputText value="#{msg.valor}"/>
                                    </f:facet>
                                    <p:cellEditor>  
                                        <f:facet name="output">
                                            <h:outputText value="#{item.valor}" />
                                        </f:facet>  
                                        <f:facet name="input">
                                            <p:inputText  value="#{item.valor}"  style="width:96%" title="#{item.idnivel6.minimo} #{app['info.a']} #{item.idnivel6.maximo}"/>
                                       </f:facet>  
                                    </p:cellEditor>  

                                </p:column>

En el SearchController.java implementar el metodo onCellEdit

 @Override
    public void onCellEdit(CellEditEvent event) {
        try {

            selected = actividadesimpuestosList.get(event.getRowIndex());
            Object oldValue = event.getOldValue();
            Object newValue = event.getNewValue();
            if (addnew) {
                actividadesimpuestosList.get(event.getRowIndex()).setValor(selected.getIdnivel6().getValor());
            }
            if (!validarValores(selected)) {
                actividadesimpuestosList.get(event.getRowIndex()).setValor(selected.getIdnivel6().getValor());
            }
            addnew = false;

        } catch (Exception e) {
            JSFUtil.addErrorMessage("onCellEdit()" + e.getLocalizedMessage());
        }

    }

Usaremos un botón para agregar las filas nuevas al datatable

Agregar un botón y el método addFila()

 <f:facet name="header">

           <p:commandButton id="addfila" style="float:right" icon="ui-icon-circle-plus"
                                                     update=":form:datatableActividadesimpuestos,:form:growl" 
                                                     title="#{app['boton.addfila']}"                                                   
                                                   action="#{actividadesimpuestosSearchController.addFila()}"
                                                     />

     <p:commandButton icon="ui-icon-disk"                                                  actionListener="#{actividadesimpuestosSearchController.save()}" 
                           update=":form:growl,:form:datatableActividadesimpuestos" />

   <p:commandButton id="button_print"                                                title="#{app['boton.print']}"                                                                                 action="#{actividadesimpuestosSearchController.imprimir()}"
                                     icon="ui-icon-print" ajax="false" />

                                </f:facet>

En el SearchController

 public String addFila() {
        try {
            addnew = true;
            Actividadesimpuestos actividadesimpuestos1 = new Actividadesimpuestos();
            actividadesimpuestos1.setActivo("si");
            actividadesimpuestos1.setIdnivel6(new Nivel6());
            actividadesimpuestos1.setFecha(JSFUtil.getFechaActual());
            actividadesimpuestos1.setUsername(loginBean.getUsuarios());
            actividadesimpuestos1.setValor(0.0);
            actividadesimpuestos1.setIdactividadesimpuestos(0);
            actividadesimpuestos1.setIdactividades(actividadesimpuestos.getIdactividades());

            actividadesimpuestosList.add(actividadesimpuestos1);
        } catch (Exception e) {
            JSFUtil.addErrorMessage(e.getLocalizedMessage());
        }

        return "";
    }

CÓDIGO COMPLETO actividadesimpuestos.xhtml

<?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:p="http://primefaces.org/ui"
      xmlns:h="http://xmlns.jcp.org/jsf/html"
      xmlns:f="http://xmlns.jcp.org/jsf/core"
      xmlns:b="http://bootsfaces.net/ui"
      xmlns:javscaz="http://xmlns.jcp.org/jsf/composite/javscaz">

    <body>

        <ui:composition template="./../../template.xhtml">

           <ui:define name="content">
                <f:view>
                    <h:form id="form" prependId="false" rendered="#{menuBeans.actividades.consultar}">
                        <p:growl  id="growl" />

                        <b:panel id="panel" look="primary" title="#{form['actividades.records']}">

                            <h:panelGrid columns="2" cellpadding="5">

                                <p:outputLabel value="#{msg.tipo}" for="tipo" />
                                <p:selectOneMenu id="tipo"
                                                 value="#{actividadesController.actividades.tipo}"

                                                 requiredMessage="#{msg.tipo} #{app['info.notnull']}">
        <f:selectItem itemLabel="#{app['selectonemenu.select']}" itemValue="#{null}"/>
                                  <f:selectItem itemLabel="#{app['tipo.vehiculos']}" itemValue="vehiculos" />
                                    <f:selectItem itemLabel="#{app['tipo.remolques']}" itemValue="remolques" />
                                    <f:selectItem itemLabel="#{app['tipo.comercios']}" itemValue="comercios" />
                                    <f:selectItem itemLabel="#{app['tipo.bicicletas']}" itemValue="bicicletas" />
                                    <f:selectItem itemLabel="#{app['tipo.bovedas']}" itemValue="bovedas" />
                                    <f:selectItem itemLabel="#{app['tipo.contribuyentes']}" itemValue="contribuyentes" />
                                    <f:selectItem itemLabel="#{app['tipo.tesoreroauxiliar']}" itemValue="tesoreroauxiliar" />
                                    <p:ajax process="tipo" event="change"
                                            update=":form:actividad,:form:growl,:form:datatableActividadesimpuestos"
                                            listener="#{actividadesSearchController.changeItemsTipo(actividadesController.actividades.tipo)}"/>
                                </p:selectOneMenu>

                                <p:outputLabel value="#{msg.actividad}" for="actividad" />
                                <p:selectOneMenu id="actividad" 
                                                 converter="actividadesConverter"
                                                 value="#{actividadesimpuestosSearchController.actividadesimpuestos.idactividades}"
                                                 >
                                    <!-- TODO: update below reference to list of available items-->
                                    <f:selectItem itemLabel="#{app['selectonemenu.select']}" itemValue="#{null}"/>
                                    <f:selectItems value="#{actividadesSearchController.actividadesPorTipoList}"
                                                   var="actividadesItem"
                                                   itemValue="#{actividadesItem}"
                                                   itemLabel="#{actividadesItem.actividad}"/>

                                    <p:ajax process="actividad" event="change"
                                            update=":form:datatableActividadesimpuestos,:form:growl"

                                            listener="#{actividadesimpuestosSearchController.changeSelectOneMenuActividad()}"/>
                                </p:selectOneMenu>




                            </h:panelGrid>

                    <p:dataTable id="datatableActividadesimpuestos"

                                         value="#{actividadesimpuestosSearchController.actividadesimpuestosList}" 

                                         var="item"
                                         paginator="false"
                                         rowKey="#{item.idactividadesimpuestos}"
                                         selectionMode="single"
                                         selection="#{actividadesimpuestosSearchController.selected}"
                                         filteredValue="#{actividadesimpuestosSearchController.filtered}" 
                                         editable="true" editMode="cell"
                                               scrollable="true" scrollHeight="300"
                                         >

                <p:ajax event="cellEdit" listener="#{actividadesimpuestosSearchController.onCellEdit}" 
                update=":form:growl" />

                        <f:facet name="header">

                           <p:commandButton id="addfila" style="float:right" icon="ui-icon-circle-plus"                                                   update=":form:datatableActividadesimpuestos,:form:growl" 
                             title="#{app['boton.addfila']}"                                                                                                        action="#{actividadesimpuestosSearchController.addFila()}"                                                     />

                           <p:commandButton icon="ui-icon-disk"
                               actionListener="#{actividadesimpuestosSearchController.save()}" 
                               update=":form:growl,:form:datatableActividadesimpuestos" />

                             <p:commandButton id="button_print"
                               title="#{app['boton.print']}"                                 
                               action="#{actividadesimpuestosSearchController.imprimir()}"
                               icon="ui-icon-print" ajax="false" />
                       </f:facet>


                <p:column>
                       <f:facet name="header">
                          <h:outputText value="#{msg.idnivel6}"/>
                       </f:facet>
                       <p:cellEditor>  
                        <f:facet name="output">
                          <h:outputText value="#{item.idnivel6.idnivel6}"/>
                       </f:facet>  
                       <f:facet name="input">
                       <p:autoComplete  scrollHeight="250"  
                          dropdown="true"  size="45"    value="#{item.idnivel6}"  
                          completeMethod="#{actividadesimpuestosSearchController.completeNivel6}"  
                          var="p"  
                          itemLabel="#{p.idnivel6}" 
                          itemValue="#{p}" converter="nivel6Converter" forceSelection="true"> 

             <p:ajax event="itemSelect" 
             listener="#{actividadesimpuestosSearchController.handleSelectNivel6(event,item.idnivel6)}" 
             update=":form,:form:growl" />  
                       <f:facet name="itemtip">
                           <h:panelGrid columns="2" cellpadding="5">
                              <p:outputLabel value="#{msg.nombre}"/>                                                      <p:outputLabel value="#{p.nombre}" />
                              <p:outputLabel value="#{msg.valor}"/>
                              <p:outputLabel value="#{p.valor}" />
                              <p:outputLabel value="#{msg.desde}"/>
                              <p:outputLabel value="#{p.minimo} #{msg.a} #{p.maximo}" />
                              <p:outputLabel value="#{msg.nivel5}"/>
                              <p:outputLabel value="#{p.idnivel5.nombre}" />
                            </h:panelGrid>
                         </f:facet>
                 </p:autoComplete> 
           </f:facet>  
      </p:cellEditor>  

               </p:column>
                                <p:column>
                                    <f:facet name="header">
                                        <h:outputText value="#{msg.nombre}"/>
                                    </f:facet>
                                    <h:outputText value="#{item.idnivel6.nombre}"/>
                                </p:column>
                                <p:column>
                                    <f:facet name="header">
                                        <h:outputText value="#{msg.valor}"/>
                                    </f:facet>
                                    <p:cellEditor>  
                                        <f:facet name="output">
                                            <h:outputText value="#{item.valor}" />
                                        </f:facet>  
                                        <f:facet name="input">
                          <p:inputText  value="#{item.valor}"  style="width:96%" 
                          title="#{item.idnivel6.minimo} #{app['info.a']} #{item.idnivel6.maximo}"/>

                                        </f:facet>  
                                    </p:cellEditor>  

                                </p:column>

                                   <p:column>
                                    <f:facet name="header">
                                        <h:outputText value="#{msg.rango}"/>
                                    </f:facet>
                                <h:outputText value="( #{item.idnivel6.minimo} a #{item.idnivel6.maximo} )"/>
                                </p:column>
                                <p:column>

                              <p:commandButton icon="ui-icon-trash"
                                 actionListener="#{actividadesimpuestosSearchController.delete(item)}" 
                                    update=":form:growl,:form:datatableActividadesimpuestos" >

                                        <p:confirm header="#{app['dialog.delete']}" 
                                        message="#{app['info.doyouwantdelete']}" icon="ui-icon-alert" />
                                    </p:commandButton>
                                </p:column>


                            </p:dataTable>


                            <javscaz:procesar/>
                        </b:panel>

                     <p:confirmDialog global="true" showEffect="fade" hideEffect="explode">
                            <p:commandButton value="#{app['boton.yes']}" type="button"
                             styleClass="ui-confirmdialog-yes" icon="ui-icon-check" />
                           <p:commandButton value="#{app['boton.no']}" type="button" 
                           styleClass="ui-confirmdialog-no" icon="ui-icon-close" />
                        </p:confirmDialog>

                    </h:form>
                    <h:form rendered="#{!menuBeans.actividades.consultar}">


                        <b:panel look="danger" title="#{app['title.accesodenegado']}">


                           <h:panelGrid columns="2" cellpadding="5">
                               <p:commandButton class="btn btn-success" action="#{loginBean.irLogin}"
                                                value="#{app['boton.return']}" ajax="false"/>
                            </h:panelGrid>
                        </b:panel>


                    </h:form>

                </f:view>
            </ui:define>

        </ui:composition>

    </body>
</html>

CODIGO COMPLETO ActividadesimpuestosSearchController.java

Agregar atributo private Boolean addnew = false; agregar el método addFila()

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package com.javscaz.brigem.search;

import com.javscaz.brigem.Actividadesimpuestos;
import com.javscaz.brigem.Nivel6;
import com.javscaz.brigem.ejb.ActividadesimpuestosFacade;
import com.javscaz.brigem.ejb.Nivel6Facade;
import com.javscaz.brigem.generales.GestorImpresion;
import com.javscaz.brigem.generales.JSFUtil;
import com.javscaz.brigem.generales.LoginBean;
import com.javscaz.brigem.generales.ResourcesFiles;
import com.javscaz.brigem.interfaces.ISearchController;
import com.javscaz.brigem.reportes.ActividadesimpuestosReporte;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import javax.annotation.PostConstruct;
import javax.faces.view.ViewScoped;
import javax.inject.Inject;
import javax.inject.Named;
import org.primefaces.event.CellEditEvent;
import org.primefaces.event.SelectEvent;

/**
 *
 * @author avbravo
 */
@Named
@ViewScoped
public class ActividadesimpuestosSearchController implements Serializable, ISearchController {

    @Inject
    ActividadesimpuestosFacade actividadesimpuestosFacade;
    @Inject
    ResourcesFiles rf;

    Actividadesimpuestos actividadesimpuestos = new Actividadesimpuestos();
    Actividadesimpuestos selected = new Actividadesimpuestos();
    private List<Actividadesimpuestos> filtered;
    List<Actividadesimpuestos> actividadesimpuestosList = new ArrayList<>();

    private List<Actividadesimpuestos> items, itemsEntity, itemsCollection;

    @Inject
    GestorImpresion gestorImpresion;
    @Inject
    LoginBean loginBean;

    Boolean encontrado = false;

    Nivel6 nivel6 = new Nivel6();
    @Inject
    Nivel6Facade nivel6Facade;
    private Boolean addnew = false;
    private  String tipo;

    public String getTipo() {
        return tipo;
    }

    public void setTipo(String tipo) {
        this.tipo = tipo;
    }


//se usa para saber si el usuario dio clic en el boton add para agregar registros a la fila

    public Boolean getAddnew() {
        return addnew;
    }

    public void setAddnew(Boolean addnew) {
        this.addnew = addnew;
    }

    public Boolean getEncontrado() {
        return encontrado;
    }

    public void setEncontrado(Boolean encontrado) {
        this.encontrado = encontrado;
    }

    //
    public Actividadesimpuestos getActividadesimpuestos() {
        return actividadesimpuestos;
    }

    public void setActividadesimpuestos(Actividadesimpuestos actividadesimpuestos) {
        this.actividadesimpuestos = actividadesimpuestos;
    }

    public Actividadesimpuestos getSelected() {
        return selected;
    }

    public void setSelected(Actividadesimpuestos selected) {
        this.selected = selected;
    }

    public List<Actividadesimpuestos> getFiltered() {
        return filtered;
    }

    public void setFiltered(List<Actividadesimpuestos> filtered) {
        this.filtered = filtered;
    }

    public List<Actividadesimpuestos> getActividadesimpuestosList() {
        return actividadesimpuestosList;
    }

    public void setActividadesimpuestosList(List<Actividadesimpuestos> actividadesimpuestosList) {
        this.actividadesimpuestosList = actividadesimpuestosList;
    }

    public ActividadesimpuestosSearchController() {
        actividadesimpuestosList = new ArrayList<>();
    }

    @PostConstruct
    public void init() {
        addnew = false;

    }

    @Override
    public String clear() {
        actividadesimpuestosList = new ArrayList<>();
        return null;
    }

    @Override
    public void iniciar() {
        actividadesimpuestosList = actividadesimpuestosFacade.getActividadesimpuestosList();
    }

    @Override
    public void iniciar(String value) {
//        actividadesimpuestosList  = actividadesimpuestosFacade.findByActivo(value);
    }

    @Override
    public String showAll() {
        try {
            actividadesimpuestosList = actividadesimpuestosFacade.findAll();

        } catch (Exception e) {
            JSFUtil.addErrorMessage(e.getLocalizedMessage());
        }
        return "";
    }

    @Override
    public List<Actividadesimpuestos> getItems() {
        try {
            if (items == null) {
                items = actividadesimpuestosFacade.findAll();

            }
        } catch (Exception e) {
            JSFUtil.addErrorMessage(e.getLocalizedMessage());
        }
        return items;
    }

    @Override
    public String changeItems() {
        try {
            items = actividadesimpuestosFacade.findAll();

        } catch (Exception e) {
            JSFUtil.addErrorMessage("changeItems() " + e.getLocalizedMessage());
        }
        return "";
    }

    @Override
    public List<Actividadesimpuestos> getItemsCollection() {
        try {
//            itemsCollection = new ArrayList(actividadesimpuestos. getNivel2Collection());

        } catch (Exception e) {
            JSFUtil.addErrorMessage(e.getLocalizedMessage());
        }
        return itemsCollection;
    }

    @Override
    public String changeItemsInverso() {
        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
    }

    @Override
    public String imprimirTodos() {
        try {

            String ruta = "/resources/reportes/actividadesimpuestos/actividadesimpuestostodos.jasper";
            HashMap parameters = new HashMap();
            parameters.put("P_MUNICIPIO", loginBean.getUsuarios().getIdmunicipio().getMunicipio());
            List<Actividadesimpuestos> listai = actividadesimpuestosFacade.findAll();
            if (listai.isEmpty()) {
                JSFUtil.addWarningMessage(rf.getMensajeArb("info.nohayregistros"));

                return "";
            }
            List<ActividadesimpuestosReporte> list = new ArrayList<>();
            listai.stream().map((a) -> {
                ActividadesimpuestosReporte ar = new ActividadesimpuestosReporte();
                ar.setActividad(a.getIdactividades().getActividad());
                ar.setIdnivel6(a.getIdnivel6().getIdnivel6());
                ar.setNombrenivel6(a.getIdnivel6().getNombre());
                ar.setValor(a.getValor());
                ar.setTipo(a.getIdactividades().getTipo());
                ar.setIdactividades(a.getIdactividades().getIdactividades());
                return ar;
            }).forEach((ar) -> {
                list.add(ar);
            });

           list.sort((p1, p2) -> p1.getTipo().compareTo(p2.getTipo()));
            gestorImpresion.imprimir(list, ruta, parameters);

        } catch (Exception ex) {
            JSFUtil.addErrorMessage("imprimir() " + ex.getLocalizedMessage());
        }
        return null;
    }
    public String imprimirTodosFiltrados(List<Actividadesimpuestos> listai) {
        try {

            String ruta = "/resources/reportes/actividadesimpuestos/actividadesimpuestostodos.jasper";
            HashMap parameters = new HashMap();
            parameters.put("P_MUNICIPIO", loginBean.getUsuarios().getIdmunicipio().getMunicipio());

            if (listai.isEmpty()) {
                JSFUtil.addWarningMessage(rf.getMensajeArb("info.nohayregistros"));

                return "";
            }
            List<ActividadesimpuestosReporte> list = new ArrayList<>();
            listai.stream().map((a) -> {
                ActividadesimpuestosReporte ar = new ActividadesimpuestosReporte();
                ar.setActividad(a.getIdactividades().getActividad());
                ar.setIdnivel6(a.getIdnivel6().getIdnivel6());
                ar.setNombrenivel6(a.getIdnivel6().getNombre());
                ar.setValor(a.getValor());
                ar.setTipo(a.getIdactividades().getTipo());
                ar.setIdactividades(a.getIdactividades().getIdactividades());
                return ar;
            }).forEach((ar) -> {
                list.add(ar);
            });

           list.sort((p1, p2) -> p1.getIdactividades().compareTo(p2.getIdactividades()));
            gestorImpresion.imprimir(list, ruta, parameters);

        } catch (Exception ex) {
            JSFUtil.addErrorMessage("imprimir() " + ex.getLocalizedMessage());
        }
        return null;
    }




    public String imprimir() {
        try {

            if (actividadesimpuestosList.isEmpty()) {
                JSFUtil.addWarningMessage(rf.getMensajeArb("info.nohayregistros"));

                return "";
            }
            List<ActividadesimpuestosReporte> list = new ArrayList<>();
            actividadesimpuestosList.stream().map((a) -> {
                ActividadesimpuestosReporte ar = new ActividadesimpuestosReporte();
                ar.setActividad(a.getIdactividades().getActividad());
                ar.setIdnivel6(a.getIdnivel6().getIdnivel6());
                ar.setNombrenivel6(a.getIdnivel6().getNombre());
                ar.setValor(a.getValor());
                ar.setTipo(a.getIdactividades().getTipo());

                ar.setIdactividades(a.getIdactividades().getIdactividades());
                return ar;
            }).forEach((ar) -> {
                list.add(ar);
            });
            String ruta = "/resources/reportes/actividadesimpuestos/actividadesimpuestos.jasper";
            HashMap parameters = new HashMap();
            parameters.put("P_MUNICIPIO", "MUNICIPIO DE " + loginBean.getUsuarios().getIdmunicipio().getMunicipio());
            parameters.put("P_TIPO", actividadesimpuestos.getIdactividades().getTipo().toUpperCase());
            gestorImpresion.imprimir(list, ruta, parameters);

        } catch (Exception ex) {
            JSFUtil.addErrorMessage("imprimir() " + ex.getLocalizedMessage());
        }
        return null;
    }

    @Override
    public List getItemsEntity() {
        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
    }

    // @Override
    @Override
    public String listar() {
        showAll();
        imprimirTodos();
        return null;
    }

    /*
    lista los registros por el tipo seleccionado
    */
    public String listarTipo() {
        try {

            actividadesimpuestosList = actividadesimpuestosFacade.findAll();

            if(actividadesimpuestosList.isEmpty()){
                System.out.println("no hay registros");
                 JSFUtil.warningDialog(rf.getMensajeArb("info.message"), rf.getMensajeArb("warning.nohayregistros"));
                return " ";
            }

            List<Actividadesimpuestos> list = new ArrayList<>();


            actividadesimpuestosList.stream().filter((ai) -> (ai.getIdactividades().getTipo().equals(tipo))).forEach((ai) -> {
                list.add(ai);
            });

            if(list.isEmpty()){
                 JSFUtil.warningDialog(rf.getMensajeArb("info.message"), rf.getMensajeArb("warning.nohayregistros"));

                return " ";
            }
              imprimirTodosFiltrados(list);
        } catch (Exception e) {
            JSFUtil.addErrorMessage("listarTipo() " +e.getLocalizedMessage());

        }


        return null;
    }
    @Override
    public String delete() {
        try {
            actividadesimpuestosFacade.remove(selected);
            actividadesimpuestosList.remove(selected);
        } catch (Exception e) {
            JSFUtil.addErrorMessage(e.getLocalizedMessage());
        }
        return null;
    }

    @Override
    public void onCellEdit(CellEditEvent event) {
        try {

            selected = actividadesimpuestosList.get(event.getRowIndex());
            Object oldValue = event.getOldValue();
            Object newValue = event.getNewValue();
            if (addnew) {
                actividadesimpuestosList.get(event.getRowIndex()).setValor(selected.getIdnivel6().getValor());
            }
            if (!validarValores(selected)) {
                actividadesimpuestosList.get(event.getRowIndex()).setValor(selected.getIdnivel6().getValor());
            }
            addnew = false;

        } catch (Exception e) {
            JSFUtil.addErrorMessage("onCellEdit()" + e.getLocalizedMessage());
        }

    }

    /**
     * guarda los registros
     */
    public void save() {
        try {
            if (actividadesimpuestos.getIdactividades().getTipo() == null) {
                JSFUtil.warningDialog(rf.getMensajeArb("info.message"), rf.getMensajeArb("warning.seleccionetipo"));

                return;
            }
            if (actividadesimpuestos.getIdactividades() == null) {
                JSFUtil.warningDialog(rf.getMensajeArb("info.message"), rf.getMensajeArb("warning.actividades"));

                return;
            }

            // editar o insertar
            Integer contadornull = 0;
            contadornull = actividadesimpuestosList.stream().filter((a) -> (a.getIdnivel6().getIdnivel6() == null)).map((_item) -> 1).reduce(contadornull, Integer::sum);

            if (actividadesimpuestosList.isEmpty() || contadornull > 0) {
                JSFUtil.warningDialog(rf.getMensajeArb("info.message"), rf.getMensajeArb("warning.nohayregistros"));

                return;
            }

            actividadesimpuestosList.stream().forEach((a) -> {
                if (!validarValores(a)) {

                }
                if (a.getIdnivel6().getIdnivel6() == null) {

                } else if (actividadesimpuestosFacade.findByIdactividadesNivelActivo(a.getIdactividades(), a.getIdnivel6(), "si").isEmpty()) {
                    actividadesimpuestosFacade.create(a);
                } else {
                    actividadesimpuestosFacade.edit(a);
                }

            });

            JSFUtil.addSuccessMessage(rf.getMensajeArb("info.save"));

        } catch (Exception e) {
            JSFUtil.addErrorMessage("save()" + e.getLocalizedMessage());
        }

    }


    public Boolean validarValores(Actividadesimpuestos ai) {
        try {
            if (ai.getValor() < 0) {
                JSFUtil.warningDialog(rf.getMensajeArb("info.message"), rf.getMensajeArb("info.valornegativo"));

                return false;
            }

            if (ai.getValor() > ai.getIdnivel6().getMaximo()) {
                JSFUtil.warningDialog(rf.getMensajeArb("info.message"), rf.getMensajeArb("info.valormayormaximo") + " " + ai.getIdnivel6().getMaximo());
                return false;
            }
            if (ai.getValor() < ai.getIdnivel6().getMinimo()) {
                JSFUtil.warningDialog(rf.getMensajeArb("info.message"), rf.getMensajeArb("info.valormenorminimo") + " " + ai.getIdnivel6().getMinimo());

                return false;
            }

        } catch (Exception e) {
            JSFUtil.addErrorMessage("validarValores()" + e.getLocalizedMessage());
        }
        return true;
    }

    @Override
    public void handleSelect(SelectEvent event) {
        try {
            actividadesimpuestosList.removeAll(actividadesimpuestosList);
            actividadesimpuestosList.add(selected);

        } catch (Exception ex) {
            JSFUtil.addErrorMessage("handleSelect() " + ex.getLocalizedMessage());

        }

    }

    @Override
    public String delete(Object t) {
        try {
            actividadesimpuestos = (Actividadesimpuestos) t;

            actividadesimpuestosList.remove(actividadesimpuestos);

            actividadesimpuestosFacade.remove(actividadesimpuestos);
        } catch (Exception ex) {
            JSFUtil.addErrorMessage("delete() " + ex.getLocalizedMessage());
        }

        return null;
    }

    public String changeSelectOneMenuActividad() {
        try {
            actividadesimpuestosList.removeAll(actividadesimpuestosList);
            if (actividadesimpuestos.getIdactividades() == null) {
                setEncontrado(false);
                return null;
            }

            buscarIdactividades();

            setEncontrado(true);
        } catch (Exception e) {
            JSFUtil.addErrorMessage("saveImpuestos()" + e.getLocalizedMessage());
        }
        return null;
    }

    public String buscarIdactividades() {
        try {

            actividadesimpuestosList = actividadesimpuestosFacade.findByIdactividades(actividadesimpuestos.getIdactividades());

        } catch (Exception e) {
            JSFUtil.addErrorMessage(e.getLocalizedMessage());
        }

        return "";
    }




    public String addFila() {
        try {
            addnew = true;
            Actividadesimpuestos actividadesimpuestos1 = new Actividadesimpuestos();
            actividadesimpuestos1.setActivo("si");
            actividadesimpuestos1.setIdnivel6(new Nivel6());
            actividadesimpuestos1.setFecha(JSFUtil.getFechaActual());
            actividadesimpuestos1.setUsername(loginBean.getUsuarios());
            actividadesimpuestos1.setValor(0.0);
            actividadesimpuestos1.setIdactividadesimpuestos(0);
            actividadesimpuestos1.setIdactividades(actividadesimpuestos.getIdactividades());

            actividadesimpuestosList.add(actividadesimpuestos1);

        } catch (Exception e) {
            JSFUtil.addErrorMessage(e.getLocalizedMessage());
        }

        return "";
    }

    public void handleSelectNivel6(SelectEvent event, Nivel6 nivel6) {
        try {
            this.nivel6 = nivel6;
        } catch (Exception ex) {
            JSFUtil.addErrorMessage("handleSelectNivel6() " + ex.getLocalizedMessage());

        }

    }

    public List<Nivel6> completeNivel6(String query) {
        List<Nivel6> suggestions = new ArrayList<>();
        try {

            query = query.trim();

            List<Nivel6> list = nivel6Facade.findByIdNivel6Like(query.toLowerCase());
            if (!list.isEmpty()) {
                actividadesimpuestosList.stream().forEach((ai) -> {
                    list.remove(ai.getIdnivel6());
                });
            }
//               actividadesimpuestosList.stream().forEach((ai) -> {
//                   list.stream().filter((n) -> (ai.getIdnivel6().getIdnivel6().equals(n.getIdnivel6()))).forEach((n) -> {
//                       list.remove(n);
//                      
//                   });
//                }); 
//           }
            list.stream().forEach((p) -> {

                suggestions.add(p);
            });
        } catch (Exception e) {
            JSFUtil.addErrorMessage("complete() " + e.getLocalizedMessage());
        }
        return suggestions;
    }
}