Wednesday, November 19, 2014

Corregir Error Caused by: javax.el.PropertyNotFoundException

Corregir Error Caused by: javax.el.PropertyNotFoundException


s.png

al ingresar un valor en exoneracion y presionar enter se genera el error y no actualiza el saldo.
exception.png






Caused by: javax.el.PropertyNotFoundException: /page/pagos/pagoseventuales.xhtml @272,122 value="#{pagoseventualesSearchController.selected.comentario}": Target Unreachable, 'null' returned null
at com.sun.faces.facelets.el.TagValueExpression.setValue(TagValueExpression.java:133)
at javax.faces.component.UIInput.updateModel(UIInput.java:832)
... 43 more
Caused by: javax.el.PropertyNotFoundException: Target Unreachable, 'null' returned null
at com.sun.el.parser.AstValue.getTarget(AstValue.java:192)
at com.sun.el.parser.AstValue.setValue(AstValue.java:226)
at com.sun.el.ValueExpressionImpl.setValue(ValueExpressionImpl.java:294)
at org.jboss.weld.el.WeldValueExpression.setValue(WeldValueExpression.java:64)
at com.sun.faces.facelets.el.TagValueExpression.setValue(TagValueExpression.java:131)
... 44 more



La línea 272 es donde se genera el error
error.png


El formulario esta compuesto por un diálogo, dentro de el un datatable, se  invoca a otro diálogo con las opciones y este lo carga el registro en en el datatable, dentro de una de las columnas hay un botón que invoca al diálogo de para escribir el comentario.

columna donde se invoca el diálogo
column.png

si revisamos el error
@272,122 value="#{pagoseventualesSearchController.selected.comentario}": Target Unreachable, 'null' returned null

En el datatable en selection
selection="#{pagoseventualesSearchController.selected}"
indica que el objeto selected contendrá el objeto seleccionado pero al cargar el dialogo genera el error null
f.png


una forma sencilla de corregirlo, en el método get verificar si es null el objeto


public Recibosdetalles getSelected() {
       if(selected == null){
        
              selected = new Recibosdetalles();
       }
       return selected;
   }


d.png


si ejecutamos el proyecto, e ingresamos la exoneración se actualiza el saldo.
t.png

Thursday, November 13, 2014

Usando < p:cellEditor > para editar dos celdas de un datatable

Pensemos que tenemos un datatable en el cual las celdas pago y exoneración son editables, deseamos que se actualice el saldo, en base a los valores en estas dos celdas.

En nuestro archivo .xhtml
agregamos un <p:remoteCommand>
  <p:remoteCommand name="onCellEditTableComplete"  update=":form:growl,:form:datatableImpuestos" />

En el <p:datatable>

   <p:dataTable id="datatableImpuestos"
                                             rows="10"
                                             value="#{pagoseventualesSearchController.listRecibosdetalles}" 
                                             var="item"
                                             paginator="true"
                                             rowKey="#{item.idnivel6}"
                                             selectionMode="single"
                                             emptyMessage="#{app['info.notienedeudapendiente']}"

                                             selection="#{pagoseventualesSearchController.selected}"
                                             filteredValue="#{pagoseventualesSearchController.filtered}" 
                                             editable="true" editMode="cell"

                                             > 
Agregamos <p:ajax>
<p:ajax event="cellEdit" listener="#{pagoseventualesSearchController.onCellEdit}" 
                                            update=":form:growl,:form:datatableImpuestos,:form:mensajes" 
                                            oncomplete="onCellEditTableComplete()"/>


En las columnas usamos <p:cellEditor>

  <p:column headerText="#{msg.pago}">
                                        <p:cellEditor>
                                            <f:facet name="output"><h:outputText value="#{item.pago}" /></f:facet>
                                            <f:facet name="input"><p:inputText value="#{item.pago}" style="width:100%" label="Year"/></f:facet>
                                        </p:cellEditor>
                                    </p:column>
                                    <p:column headerText="#{msg.exoneracion}">
                                        <p:cellEditor>
                                            <f:facet name="output"><h:outputText value="#{item.exoneracion}" /></f:facet>
                                            <f:facet name="input"><p:inputText value="#{item.exoneracion}" style="width:100%" label="Year"/></f:facet>
                                        </p:cellEditor>
                                    </p:column>





                                    <p:column>
                                        <f:facet name="header">
                                            <p:outputLabel value="#{msg.saldo}"/>
                                        </f:facet>
                                        <p:outputLabel value="#{item.saldo}" >
                                            <f:convertNumber type="number"   groupingUsed="true"
                                                             minFractionDigits="2" pattern="#0.00"/>
                                        </p:outputLabel>
                                    </p:column>


En el @NamedBeans creamos el metodo onCellEdit
obtiene le fila seleccionada
            selected = listRecibosdetalles.get(event.getRowIndex());

permite asignar valores a las columnas especificas
listRecibosdetalles.get(event.getRowIndex()).setPago(0.0);


 public void onCellEdit(CellEditEvent event) {
 try {

            selected = listRecibosdetalles.get(event.getRowIndex());

            Object oldValue = event.getOldValue();
            Object newValue = event.getNewValue();
            if (newValue != null && !newValue.equals(oldValue)) {
             if (selected.getPago() < 0) {
                    JSFUtil.warningDialog(rf.getMensajeArb("info.message"), rf.getMensajeArb("info.valornegativo"));
                    listRecibosdetalles.get(event.getRowIndex()).setPago(0.0);
                    selected.setPago(0.0);
                    listRecibosdetalles.get(event.getRowIndex()).setSaldo(selected.getSaldoanterior() - selected.getPago() - selected.getExoneracion());
                }
}

Wednesday, November 12, 2014

Java server Faces 2.3.0-m01-SNAPSHOT

Java Server Faces 2.3, traerá algunas cosas interesantes
Editamos el archivo pom.xml y especificamos la versión  2.3.0-m01-SNAPSHOT
Fuente

<dependency>
            <groupId>org.glassfish</groupId>
            <artifactId>javax.faces</artifactId>
            <version>2.3.0-m01-SNAPSHOT</version>
        </dependency>

Entre los avances que trae es que podemos usar CDI para UIViewRoot viewRoot y ExternalContext 

  





Thursday, October 16, 2014

Java Español- Norte America-Centro America-Sur America

En el día de hoy se dio una reunión organizada por nuestro amigo Alexis Lopez, cuyo objetivo fue reunir Jug-leaders, JavaChampions, miembros de las comunidades de Java en Español, a nivel del Continente Americano.

Esta reunión los participantes convocados:
Alexis Lopez - Colombia

Aristides Villarreal - Panamá
Cesar Hernandez - Guatemala
Diego Silva - Perú
Jorge Vargas - Mexico
Jose Díaz - Perú


El propósito es reforzar la presencia de la comunidad Java en Español, coordinar las actividades a nivel regional, establecer una organización común que reuna las diversas comunidades.
Sin lugar a dudas fue una gran experiencia, compartir con mis amigos en una videoconferencia muy amena donde se establecieron importantes lineamientos a seguir.
Pronto se estará convocando a otros Jugleaders y miembros de las comunidades a unirse a esta iniciativa.
Esta fue la primera reunión de Jugleaders de latinoamericana sobre Java en español.


Tuesday, September 23, 2014

RemoteCommand primefaces

RemoteCommand de primefaces nos permite ejecutar los métodos de un Beans con JavaScript.
Podemos usarlo para varias actividades, en este ejemplo sencillo, para validar cuando se da Enter sobre una textField
  <p:remoteCommand  update="panel,growl,:form:barra:toolbar"
                                             name="remoteidnivel1" actionListener="#nivel1SearchController.load()}"/>

  <p:inputText id="idnivel1" size="35" value="#{nivel1Controller.nivel1.idnivel1}" title="#{msg.idnivel1}" required="true"
                                                     requiredMessage="#{msg.idnivel1} #{app['info.required']}"
                                                      onkeypress="if (event.keyCode == 13) {
                                                       remoteidnivel1();
                                                       return false;

                                                   }"/>

Friday, September 12, 2014

NetBeans 8.0.1 en Español

NetBeans 8.0.1 disponible en español
http://bits.netbeans.org/netbeans/8.0.1/community/
Esta disponible NetBeans 8.0.1 en varios idiomas .


Puedes descargar la nueva versión y utilizar las nuevas características