viernes, 22 de noviembre de 2013

Generar Reporte en Ireport sin JSP !!! =)

Hola!!!

En esta Ocasión deben tener ya conocimientos de como realizar un reporte en ireport en el caso que no sea así pueden revisar este enlace http://www.javatutoriales.com/2009/02/creacion-de-reportes-con-jasperrepots-y.html que me parece que esta muy bien explicado pero al final indica con jsp.

La Entrada del día de hoy es genial... me surgió la necesidad de hacerlo debido a que necesitaba enviar un parámetro de tipo Date al jasper pero  el JSP me trajo demasiado inconvenientes.
Entonces para que el código no se me pierda a continuación les explicaré:
Antes debieron ver realizado el respectivo reporte en el ide Ireport y ver generado ya su archivo jasper.

Lo primero que debemos de indicar es establecer nuestra conexión dependiendo de la base, para el ejemplo es con Informix.

                Connection con = null;
    Connection conn = null;
   try {
                     Class.forName("com.informix.jdbc.IfxDriver");
   }
   catch (ClassNotFoundException e) {
     System.out.println("MySQL JDBC Driver not found.");
     System.exit(1);
   }
                  try {
   
     conn = DriverManager.getConnection("indicar el Driver ejm. jdbc:informix-sqli://"direccion sea localhost o la ip/"nombreBase": INFORMIXSERVER="nombreServidor","usuario","clave"");
     conn.setAutoCommit(false);
   }

Luego establecemos cuales serán los parámetros que enviaremos al jasper lo haremos a través de un Map, en este enlace le explican bien detallados sobre este tipo de Colección  http://java67.blogspot.com/2013/02/10-examples-of-hashmap-in-java-programming-tutorial.html

Map parameters = new HashMap();
      parameters.put("valorInicial", this.montoInicial);
parameters.put("bodega", this.bodega);
parameters.put("item", new String(this.item);
parameters.put("fechaInicio",this.diaDesde);
parameters.put("repartoSesion", repartoSesion);
parameters.put("fechaFin",this.diaHasta);

A continuación tenemos que añadir lo siguiente:

ExternalContext externalContext = FacesContext.getCurrentInstance().getExternalContext();
HttpServletRequest request = (HttpServletRequest) externalContext.getRequest();
HttpServletResponse response = (HttpServletResponse) externalContext.getResponse();
ServletContext context = (ServletContext) externalContext.getContext();

Ahora el archivo de la plantilla del reporte no se encuentra en la raiz del proyecto, sino dentro del directorio web, debemos indicar la ruta completa en la que se encuentra este archivo.

JasperReport reporte = (JasperReport) JRLoader.loadObjectFromFile(context.getRealPath("/reportes/kardex.jasper"));
JasperPrint print = JasperFillManager.fillReport(reporte, parameters, conn);

Luego Exportamos nuestro Reporte al directorio web:
JasperExportManager.exportReportToPdfFile(print,context.getRealPath("/reportes/kardex.pdf"));

Finalmente mostramos nuestro Reporte:
 request.getSession().setAttribute(BaseHttpServlet.DEFAULT_JASPER_PRINT_SESSION_ATTRIBUTE, print);  
response.sendRedirect(request.getContextPath()+"/reportes/kardex.pdf");
FacesContext.getCurrentInstance().responseComplete();



Este es el código Completo:

public void generarReporte(){
try{
//CARGAMOS EL DRIVER
Connection con = null;
    Connection conn = null;
   try {
     Class.forName("com.informix.jdbc.IfxDriver");
   }
   catch (ClassNotFoundException e) {
     System.out.println("MySQL JDBC Driver not found.");
     System.exit(1);
   }
   //Para iniciar el Logger.
   //inicializaLogger();
   try {
   
     conn = DriverManager.getConnection("jdbc:informix-sqli://123456:1526/BASE:INFORMIXSERVER=ol_nt_desa","USUARIO","CLAVE");
     conn.setAutoCommit(false);
   }
   catch (SQLException e) {
     System.out.println("Error de conexión: " + e.getMessage());
     System.exit(4);
   }

   try {
   
   
    Map parameters = new HashMap();
      parameters.put("valorInicial", this.montoInicial);
parameters.put("bodega", new String(this.bodegaDescripcion.getBode_codi().toString()));
parameters.put("item", new String(this.remove1(item.toString())));
parameters.put("fechaInicio",this.diaDesde);
parameters.put("repartoSesion", repartoSesion);
parameters.put("fechaFin",this.diaHasta);
parameters.put("usuario", this.remove1(this.datos.getUserName()));
parameters.put("cantidadInicial",this.cantidadInicial);
parameters.put("descripcionBodega", this.bodegaDescripcion.getBode_codi()+" - "+this.remove1(this.bodegaDescripcion.getBode_desc()));
ExternalContext externalContext = FacesContext.getCurrentInstance().getExternalContext();
HttpServletRequest request = (HttpServletRequest) externalContext.getRequest();
HttpServletResponse response = (HttpServletResponse) externalContext.getResponse();
ServletContext context = (ServletContext) externalContext.getContext();
JasperReport reporte = (JasperReport) JRLoader.loadObjectFromFile(context.getRealPath("/reportes/kardex.jasper"));
JasperPrint print = JasperFillManager.fillReport(reporte, parameters, conn);


     // Exporta el informe a PDF.
JasperExportManager.exportReportToPdfFile(print,context.getRealPath("/reportes/kardex.pdf"));
 // PERMITE VISUALIZAR EL REPORTE EXPORTADO.
//ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
request.getSession().setAttribute(BaseHttpServlet.DEFAULT_JASPER_PRINT_SESSION_ATTRIBUTE, print);  
    response.sendRedirect(request.getContextPath()+"/reportes/kardex.pdf");
FacesContext.getCurrentInstance().responseComplete();

 //Para visualizar el pdf directamente desde java
// JasperViewer.viewReport(print, false);
return;
 
   }
   catch (Exception e) {
     e.printStackTrace();
   }
   finally {
     /*
      * Cleanup antes de salir
      */
     try {
       if (conn != null) {
         conn.rollback();
         System.out.println("ROLLBACK EJECUTADO");
         conn.close();return;
       }
     }
     catch (Exception e) {
       e.printStackTrace();
     }
   }
}catch (Exception e) {
System.out.println("Error en Generar Reporte"+e);
}


No duden en comentar!!!  Espero les sirva =)

miércoles, 6 de noviembre de 2013

Utilizar confirm para afirmar una accion o cancelarla.

<a4j:commandLink
ajaxSingle="true" id="deleteRec2_ID"
onclick="if(!confirm('SEGURO DESEA ELIMINAR EL RECLUTAMIENTO SELECCIONADO')){return false};"
action="#{recMB2.eliminarListRec}" reRender="dt_detRec_ID,mensajesformulario"
limitToList="true">
<rich:toolTip value="Eliminar Reclutamiento" for="deleteRec2_ID" />
<h:graphicImage value="/images/icons/eliminarReclut.jpg"
style="border:0;width : 25px; height : 27px;" />
<f:setPropertyActionListener value="#{objVar}"
target="#{recMB2.recSeleccionado}"></f:setPropertyActionListener>
</a4j:commandLink> 


asi se hace, si sale, x su mardita desjracia no les sarga!.

viernes, 18 de octubre de 2013

INSERCION O ACTUALIZACION CON PROCEDURE

 USO DE PROCEDURE EN UNA TRANSACCION.
/////////////////////GESTOR///////////////////

//////////////////SERVICIO-DECLARACION//////////////
/////////////////SERVICIO-IMPLEMENTACION////////////////

////////////////////////////DAO-DECLARACION/////////////////////////////////

////////////////////////////DAO-IMPLEMENTACION///////////////////////////////
/////////////////PROCEDURE//////////////////////


miércoles, 16 de octubre de 2013

OPERADOR TERNARIO

OTRA MANERA DE REALIZAR VALIDACION REEMPLAZANDO EL "IF-ELSE"
CON OPERADOR TERNARIO
La forma comun en la que utilizamos las validacion es:

Pero utilizando el operador ternario seria algo asi:
 
int tiempo_de_apertura = (día == FIN_DE_SEMANA) ? 12 : 9;

EXPLICACIÓN:

Esto nos ayuda a reducir mucho código.
NOTA:
El operador ternario, u operador ?, es una forma compacta de escribir una sentencia if/else. Esta está presente en muchos lenguajes de programación, incluyendo Java. Las sentencias ternarias se pueden utilizar en Java cada vez que se necesita una sentencia if/else. La sentencia ternaria puede mejorar la legibilidad de tu programa mediante la combinación de los estados precedentes y la consiguiente de una sentencia if en una sola línea. 
La sintaxis básica de una sentencia ternaria es la siguiente: (predicado) ? (sentencia consecuente si predicado es verdadero) : (sentencia consecuente si predicado es falso).

martes, 24 de septiembre de 2013

EXPRESION REGULAR PARA VALIDAR UN FORMATO STRING



VALIDAR EL FORMATO DE HORA “HH:MM”
                                            Expresión regular=“^[0-2]*[0-3]:[0-5][0-9]$”

//FUNCION PARA AGREGAR UNA EXPRESION REGULAR//
public boolean validaFormato(String s)
{
  Pattern p = Pattern.compile("^(([0-1]?[0-9])|([2][0-3])):([0-5]?[0-9])?$");
  Matcher m = p.matcher(s);
  if (m.find())
  { return false; }
  else
  { return true; }
}

Hay que verificar que la importación que hagamos del Pattern sea de "java.util.regex.Pattern
//PAGINA PARA PRUEBAS DE EXPRESIONES REGULARES//

ERROR EN EL ENTITYMANAGER

Este error puede quitar mucho tiempo al encontrar cual es la causa del problema pero realmente es muy sencillo.
La firma que colocamos en las transacciones debe ser obligatoria tanto en el “LOCAL” como en el “IMPL”.
Este es el caso de este error si en la transacción “Impl” ponemos la etiqueta de requerido y en el “Local” no la podemos nos surge el error ya que en “Manejador de entidades” no puede reconocer a la transacción como tal.

NOTAS:


  • TransactionAttribute anotación especifica si el recipiente es invocar un método de negocio dentro de un contexto de transacción. El TransactionAttribute anotación se puede utilizar para beans de sesión y beans controlados por mensajes.


  • Especificación del TransactionAttribute anotación en la clase bean significa que se aplica a todos los métodos de negocio aplicable de la clase. Especificación de la anotación en un método que se aplica sólo a ese método. Si la anotación se aplica tanto a la clase y el nivel de método, el valor del método anula si los dos están de acuerdo.



viernes, 13 de septiembre de 2013

detached entity passed to persist


MENSAJE DE ERROR

javax.persistence.PersistenceException: org.hibernate.PersistentObjectException: detached entity passed to persist

Lo Bueno de ser programadores es que cada día se aprende algo nuevo, y en ocasiones los errores que se nos presentan ya nos han sucedido pero tendemos a olvidarnos, por esa razón es excelente idea colocar dichos errores en el blog.

Este error de JPA ya me había sucedido, pero en si, me demore algunos minutos de analizar el  Por que?
entonces a continuación les explico:

Debemos saber que Hibernate distingue entre  los objetos pertenecientes a una transacción y los que no( transiet y detached).

Cuando tratamos de persistir un objeto transaccional que hemos indicado que si tiene un ID, hibernate a través del archivo orm.xml que se encuentra en el directorio META-INF donde posiblemente tenemos indicado una table-generator, el se encargará de colocar el valor del ID. Por tal razón no es necesario que le asignemos una secuencia nosotros al momento de mandar a persistir. Si hacemos eso, es ahí donde ocurre el famoso   detached entity passed to persist.



miércoles, 21 de agosto de 2013

DAR FOCO A UN ELEMENTO CON JAVASCRIPT

Nombre del formulario principal==>frmLicenciasComisiones.
Nombre del formulario del Modal==>formDireccionTelefono.(Aqui se encuentra el elemento con Id="direccion")
Los datos del modal llegan con el evento readonly="true" por medio de una variable ("flagModalDireccion") en el M.B.

////////////////////////CODIGO DEL BOTON "CAMBIAR"//////////////////////////////
<a4j:commandButton value="Cambiar" action="#registroTramitesLCMB.CambiarReadOnlyDeModalDireccion}"==>la funcion pone la flagModalDireccion como false
oncomplete="msjAlerta()"
reRender="formDireccionTelefono" ajaxSingle="true">
</a4j:commandButton>

//////////////////////////////////////CODIGO JAVASCRIPT///////////////////////////////
<script type="text/javascript">
function msjAlerta()
{
document.getElementById('formDireccionTelefono:direccion').focus()
                                el foco se lo da al Id direccion en relación al formulario que pertenece "formDireccionTelefono"
}
</script>


miércoles, 7 de agosto de 2013

viernes, 26 de julio de 2013

will smith - BBC video

http://www.youtube.com/watch?v=ZwS14TiO7Pk

Objetivo inalcanzable, 'objeto' devolvió nulo: javax.el.PropertyNotFoundException


Les Comparto esta recomendación encontrada en Internet para resolver este error.

Las recomendaciones que les puedo dejar son las siguientes:

1. Verificar que el bean al que estamos llamando en la pagina jsf (.xhtml) sea serializable. (public class Clase implements serializable).

2. Que el objeto al que estemos llamando tenga getters y setters. Ej.

value="#{indexPage.person.nombre}"

El objeto person debe tener getter y setter en el bean. Y el objeto nombre debe tener getter y setter en la clase Person.

3. Si estamos usando un objeto en el bean como person. Debemos verificar que este este inicializado, en el constructor. A veces no nos damos cuenta por que carga la pagina pero no se puede guardar o hacer alguna operacion crud. Ej.

public class Clase implements serializable
{

   ///Esta linea depende de su necesidad
   private static final long serialVersionUID = 1L;

   private Person person;

   public Clase (){
          person=new Person();
   }

    public Person getPerson()
   {
          return this.person;
    }
    public void setPerson(Person person)
   {
          this.person= person;
   }
}

Bendiciones
Recomiendo esta pagina de facebook:https://www.facebook.com/LinajeIVN

Leche Chiva


Adios Chicos no participare con ustedes, Yo soy leche de chiva, quien la auspiciaba :)