20 septiembre 2010
Capturando datos en una Tabla (Web)
Inicialmente les mostraré un video para que vean los resultados del post:
Este post, lo estaré actualizando, con sus respectivas intrucciones, por ahora, les dejo el codigo fuente, para aquellos que deseen explorarlo...
WebObjectList
pass: ecanaveras.blogspot.com
Nota: este post no esta en su version final, pendiente actualizaciones...
07 septiembre 2010
Netbeans 6.9.1 con Java FX
bueno entrando en materia, ya tenemos disponible la nueva version de Netbeans, en el idioma que deseen..
aca el link de descarga: Descargar Netbeans 6.9.1
y para aquellos que les gusta probar los mas reciente, aca tienen el link para Netbeans 6.10 M1 que en realidad deberia llamarse "Netbeans 7.0", bueno es mi opinion.
link: Descargar Netbeans 6.10 M1
Saludos...
28 diciembre 2009
Netbeans 6.8
28 octubre 2009
NetBeans IDE 6.8 Beta
http://www.netbeans.org/community/releases/68/
Algunas características:
JavaFX SDK 1.2.1
Web Projects con JavaServer Faces 2.0 (Facelets)
Java Enterprise Edition 6
y mucho mas...
05 julio 2009
Ejemplos de Aplicacion Web
En el Web Developer Resource Center http://webdev2.sun.com/ encontre una Aplicacion de ejemplo de todos estos componentes, nos permite ver el codigo fuente, tanto del JSP como de la clase Java, resulta muy util, ya que podemos ver el funcionamiento de los componentes y la forma como deben usarse!!
aca esta la aplicacion de ejemplo: http://webdev2.sun.com/example/
...seguro que aprenderan algunos trucos que quizas desconocian de los componentes Woodstock!!!
ademas en el Web Developer Resource Center podrán encontrar ejemplos de otras tecnologias, Dynamic Faces, Ajax etc.
26 junio 2009
Usando ObjectListDataProvider
para luego guardar lo que deseamos.
En esta entrada les mostraré un tecnica para realizar esto, usando Netbeans y Glassfish... y la ayuda de una clase muy poderoza ObjectListDataProvider, aqui veran una de los tantos usos que le podemos dar en una aplicacion Web...
Lo primero que haremos será crear un Nuevo Proyecto, en el IDE Netbeans, nos dirigimos a File > New Project... nos aparece la sgte ventana, en Categories escogemos Java Web y en Projects > Web Application damos clic en Next

Luego aparece esta nueva ventana donde nombramos al proyecto en nuestro caso WebObjectList y damos clic en Next

Aparece esta nueva ventana donde escogemos el servidor, en nuestro caso Glassfish y damos clic en Next

Luego escogemos el Frameworks, seleccionamos Visual Web JavaServer Faces y damos clic en Finish
Despues de los pasos anteriores, ceramos la clase que nos permitirá agregar datos al ObjectListDataProvider, En la ventana Projects, seleccionamos nuestra Aplicacion, WebObjectList, creamos un nuevo Java Package (paquete), y lo nombramos myClass...despues de haber creado el paquete procedemos a crear nuestra clase, sobre myClass damos clic derecho New > Java Class, aparece la sgte ventana, la nombramos dataNames y cliqueamos Finish

agregamos el sgte cdgo:
/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package myClass; /** * * @author ecanaveras */ public class dataNames { public dataNames(String nombre, String apellidos) { this.nombre = nombre; this.apellidos = apellidos; } private String nombre; public String getNombre() { return nombre; } public void setNombre(String nombre) { this.nombre = nombre; } private String apellidos; public String getApellidos() { return apellidos; } public void setApellidos(String apellidos) { this.apellidos = apellidos; } }
agregamos el sgte cdgo:
/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package myClass; import com.sun.data.provider.impl.ObjectListDataProvider; import java.util.ArrayList; import java.util.List; /** * * @author ecanaveras */ public class dataNamesDataProvider extends ObjectListDataProvider { private List<dataNames> dataList = new ArrayList<dataNames>(); //Especificamos que la DataProvider deber ser Tipo dataNames public dataNamesDataProvider() { this.setList(dataList); this.setObjectType(dataNames.class); } //Agrega datos al DataProvider public void addNames(dataNames newData){ dataList.add(newData); } }
private dataNamesDataProvider namesDataProviver = new dataNamesDataProvider(); public dataNamesDataProvider getNamesDataProviver() { return namesDataProviver; } public void setNamesDataProviver(dataNamesDataProvider namesDataProviver) { this.namesDataProviver = namesDataProviver; }
2 Texfield 1 button 1 table
En los compenentes que se usarán en el codigo Java, damos clic derecho y escogemos Add Binding Attribute, en este caso los textFields y el TableRowGorup de la tabla
Generamos (Build) nuestro proyecto, este paso es necesario para que JSF Page se actualize y conozca de la existencia del ObjectListDataProvider (namesDataProviver) del SessionBean1
ahora regresamos a nuestro JSP, sobre la tabla damos clic derecho, escogemos Table Layout aparece la sgte ventana, en el dropDown Get Data From, selecionamos namesDataProvider, e inmediatamente aparecen los campos de nuestra clase dataNames, y agregamos una nueva columna con un boton (boton Quitar).
nos queda algo parecido a esto: (lo verde es un gridPanel jejeje)
Ahora agregaremos registros a la tabla, en realidad al ObjectListDataProvider, entramos en la accion del boton "Agregar" haciendo doble clic sobre el mismo, y escribimos el sgte codigo:
public String btnAgregar_action() { //Validar lo campos String name = txtName.getText() != null ? txtName.getText().toString() : ""; String apellido = txtApellido.getText() != null ? txtApellido.getText().toString() : ""; //Crear nuevos datos dataNames datos = new dataNames(name, apellido); //Agregar registros al DataProvider getSessionBean1().getNamesDataProviver().addNames(datos); getSessionBean1().getNamesDataProviver().commitChanges(); txtName.setText(null); txtApellido.setText(null); System.out.println("Registro add"); return null; }
public String btnQuitar_action() { //Quitar Registros RowKey rk = getTableRowGroup1().getRowKey(); getSessionBean1().getNamesDataProviver().removeObject(rk); getSessionBean1().getNamesDataProviver().commitChanges(); return null; }
si desean el codigo fuente del proyecto aca lo dejo a disposicion!:
WebObjectList.zip
y como siempre les dejo un video del funcionamiento del la Aplicacion desarrollada en esta entrada.
Dejen sus comentarios... cualquier duda me comentan!!
09 junio 2009
Tabla con textfield editables
bueno, en este post les diré el truquito para tomar esos valores... que pueden ser de cualquier componente... aunque no lo he probado con todos (solo texField y dropDonws), pero estoy casi seguro que si...
He aqui una imagen del resultado...

Entremos en materia...
Este ejemplo fue realizado con Netbeans 6.5 y GlassFish v2
lo primero que tienen que hacer es crear una nueva pagina JSP

luego arrastran un componente table, lo enlazan con un RowSet... puede ser cualquiera

una vez tengan lista esta parte, solo resta cambiar los componentes que por defecto coloca la tabla, en este caso staticText, lo cambian por textField, esto en las columnas que desea editar...

luego nos dirimos a la ficha Java (a el codigo java de la pagina en cuestion) y agregamos por cada columna editable dos propiedades, en este caso direccion y nDireccionMap de la sgte forma:
//direccion public String getDireccion() { String dirTable = getValue("#{currentRow.value[\'CampoDataProvider\']}").toString(); TableRowDataProvider rowData = (TableRowDataProvider) getBean("currentRow"); if (rowData == null) { return dirTable; } else { String rowId = rowData.getTableRow().getRowId(); String nDir = (String) this.getNDireccionMap().get(rowId); if (nDir == null) { return dirTable; } else { return nDir; } } } public void setDireccion(String valor) { TableRowDataProvider rowData = (TableRowDataProvider) getBean("currentRow"); if (rowData != null) { String rowId = rowData.getTableRow().getRowId(); this.getNDireccionMap().put(rowId, valor); } } //nDireccionMap private Map nDireccionMap = new HashMap(); public Map getNDireccionMap() { return this.nDireccionMap; } public void setNDireccionMap(Map nDir) { this.nDireccionMap = nDir; }
Ojo deben reemplazar la frase CampoDataProvider, por el nombre del campo del que tomaran el valor en el dataProvider, ose el valor a Editar.
Ej:
String nomCliente = getValue("#{currentRow.value[\'nombreCliente\']}").toString();En este caso mi objetivo es retornar un String, pero pueden hacerlo con cualquier tipo, ya sea Int, Double, Boolean etc...
luego de haber agregado las variables necesarias en el codigo java, nos devolvemos a la vista de Diseño... nos dirigimos a la tabla que habiamos agregado anteriormente, le damos clic y pasamos a la ventana Navigator, seleccionamos el objeto correspondiente en este caso un textField, luego pasamos a la ventana Propiedades , buscamos la propiedad text...
le damos sobre los tres punticos [...] y nos aparece lo sgte:
Escogemos Use binding en la parte superior, y nos debe aparecer la variable que agregamos en codigo java, en este caso direccion, la seleccionamos y le damos en OK
Listo y con esto ya podemos acceder a lo valores que toma el textField....
Bueno se preguntaran, pero como tomo los valores??? jajaja no se preocupen ahora le muestro como hacerlo...
Despues de haber agregado los atributos de los objetos en cuestion, en este caso el tableRowGroup, ponemos un boton en el Jsp, y en el action del boton quedaria algo asi:
public String button_action() { //Este caso deseo recorrer todo lo que esta en la tabla RowKey[] allRows = getTableRowGroup1().getRowKeys(); for (int i = 0; i < allRows.length; i++) { RowKey rowKey = allRows[i]; String direccion = ((String) this.nDireccionMap.get(rowKey.getRowId())).toString(); info("El valor del Textfiel es: " + direccion); } return null; }
Amigos... se me olvidaba tambien pueden editar los valores del textField o del componente que usen, de la sgte forma:
public String button_action() { //Este caso deseo recorrer todo lo que esta en la tabla RowKey[] allRows = getTableRowGroup1().getRowKeys(); for (int i = 0; i < allRows.length; i++) { RowKey rowKey = allRows[i]; //Editanto todos los textField de la tabla... this.nDireccionMap.put(rowKey.getRowId(),"Aqui el valor que quieran"); } return null; }
05 marzo 2009
Aplicacion Web con Netbeans 6.5, Ireport y jasperReports
Despues de haber configurado Netbeans debemos:
Configurar el Proyecto
En el IDE, enla pestaña Proyects damos clic derecho sobre nuestra Aplicacion Web "Proyecto" y selecionamos Propiertes, nos aparecera la sgte ventana:
4. Configurar el servidor de Aplicaciones (Glassfish).
En el explorador de windows, nos vamos a la carpeta donde tenemos instalado nuestro servidor de aplicaciones, y luego hasta el subdirectorio de nuestro dominio config, en mi caso "C:\Archivos de programa\glassfish-v2ur2\domains\domain1\config", y editamos el archivo server.policy...
Agregamos el siguiente segmento de Codigo:
// Librerias Jaspergrant codeBase "file:/C:/aplicaci/Syslex/build/web/-"{
permission java.util.PropertyPermission "*", "read,write";
permission java.lang.RuntimePermission "createClassLoader";
permission java.lang.reflect.ReflectPermission "suppressAccessChecks";
permission java.lang.RuntimePermission "accessDeclaredMembers";
permission java.lang.RuntimePermission "getProtectionDomain";
};
grant {
permission java.lang.RuntimePermission "createClassLoader";
Ojo, deben reemplazar la ruta de color rojo por la de su proyecto.!
Ahora, nos regresamos al proyecto y agregamos una nueva carpeta llamada reportes en la ruta scr
En el proyecto nos vamos a Web Pages > WEB-INF y abrimos el archivo web.xml ...
...en la Ficha Servlets, damos clic en el boton ubicado en la esquina superior derecha Add Servlet Element
Escribimos lo sgte:
- Servlet Name: ImageServlet
- ServletClass: net.sf.jasperreports.j2ee.servlets.ImageServlet
- URL Pattern(s): /images
y damos OK
En el proyecto creamos una nueva carpeta con el nombre images, en la ruta web\resources
En el IDE, nos vamos a la Pestaña Files selecionamos nuestro proyecto y abrimos el archivo build.xml
y agregamos antes de la etiqueta </project> el sgte codigo:
<property name="jrc.home"
value="c:\descargas\java\jasperreports-1.3.3"/>
<path id="jrc.classpath">
<fileset dir="${jrc.home}/dist"
includes="*.jar"/>
<fileset dir="${jrc.home}/lib"
includes="*.jar"/>
</path>
<taskdef name="jrc"
classname="net.sf.jasperreports.ant.JRAntCompileTask">
<;classpath refid="jrc.classpath"/>
</taskdef>
<target name="-post-compile"
description="Compile all Jasper Reports Definitions">
<mkdir dir="${build.web.dir}/WEB-INF/reportes"/>
<jrc srcdir="src/reportes"
destdir="${build.web.dir}/WEB-INF/reportes">
<classpath
refid="jrc.classpath"/>
<include
name="*.jrxml"/>
</jrc>
<delete>
<fileset dir="${build.web.dir}/WEB-INF/classes"
includes="*.jrxml"/>
</delete>
</target>
Ojo, deben reemplazar la ruta de color rojo por la del proyecto jasper-reports-1.3.3 !
Por último, abrir el ApplicationBean1.java y agregar el siguiente código al final
/**
* <p>Prefix to the resource name for compiled reports.</p>
*/
private static final String PREFIX = "/WEB-INF/reportes/";
/**
* <p>Suffix to the resource name for compiled reports.</p>
*/
private static final String SUFFIX = ".jasper";
/**
* <p>Valid content types for reports that we can produce.</p>
*/
private static final String[] VALID_TYPES = {"text/html", // Standard HTML representation
"application/pdf", // Adobe Portable Document Format
"application/rtf" //Microsoft Word RTF
};
/**
* <p>Generate the specified report, in the specified output
* format, based on the specified data.</p>
*
* @param name Report name to be rendered
* @param type Content type of the requested report ("application/pdf"
* or "text/html")
* @param data <code>ResultSet</code> containing the data to report
*
* @exception IllegalArgumentException if the specified
* content type is not recognized
* @exception IllegalArgumentException if no compiled report definition
* for the specified name can be found
*/
public void jasperReport(String name, String type) {
jasperReport(name, type, new HashMap());
}
//Editado by elcapi
public void jasperReport(String name, String type, ResultSet data) {
jasperReport(name, type, new HashMap());
}
/**
* <p>Generate the specified report, in the specified output
* format, based on the specified data.</p>
*
* @param name Report name to be rendered
* @param type Content type of the requested report ("application/pdf"
* or "text/html")
* @param data <code>ResultSet</code> containing the data to report
* @param params <code>Map</code> of additional report parameters
*
* @exception IllegalArgumentException if the specified
* content type is not recognized
* @exception IllegalArgumentException if no compiled report definition
* for the specified name can be found
*/
public void jasperReport(String name, String type, ResultSet data, Map params) {
if (!isReporte(type)) {
return;
}
ExternalContext econtext = getExternalContext();
// Fill the requested report with the specified data
JRResultSetDataSource ds = new JRResultSetDataSource(data);
JasperPrint jasperPrint = nextPrint(this.compilarReporte(econtext, name), params, null, ds, 1);
generarReporte(econtext, type, jasperPrint);
}
//Reportes que no necesitan ResulSet...
public void jasperReport(String name, String type, Map params) {
if (!isReporte(type)) {
return;
}
ExternalContext econtext = getExternalContext();
Connection conx = this.getConexion();
JasperPrint jasperPrint = nextPrint(this.compilarReporte(econtext, name), params, conx, null, 0);
// Configure the exporter to be used, along with the custom
// parameters specific to the exporter type
generarReporte(econtext, type, jasperPrint);
}
private Boolean isReporte(String type) {
// Validate that we recognize the report type
// before potentially wasting time filling the
// report with data
boolean found = false;
for (int i = 0; i < VALID_TYPES.length; i++) {
if (VALID_TYPES[i].equals(type)) {
found = true;
break;
}
}
if (!found) {
throw new IllegalArgumentException("Invalid report type '" + type + "' requested");
}
return found;
}
private InputStream compilarReporte(ExternalContext econtext, String name) {
InputStream stream = econtext.getResourceAsStream(PREFIX + name + SUFFIX);
if (stream == null) {
throw new IllegalArgumentException("Unknown report name '" + name + "' requested");
}
return stream;
}
private Connection getConexion() {
Context ctx;
Connection conx;
try {
ctx = new InitialContext();
DataSource dataSource = (DataSource) ctx.lookup("java:comp/env/jdbc/Name_Conexion");
conx = dataSource.getConnection();
} catch (Exception e) {
throw new FacesException(e);
}
return conx;
}
private JasperPrint nextPrint(InputStream stream, Map params, Connection conx, JRResultSetDataSource ds, int opcion) {
JasperPrint jasperPrint = null;
try {
switch (opcion) {
case 0:
jasperPrint = JasperFillManager.fillReport(stream, params, conx);
break;
case 1:
jasperPrint = JasperFillManager.fillReport(stream, params, ds);
break;
}
} catch (RuntimeException e) {
throw e;
} catch (Exception e) {
throw new FacesException(e);
} finally {
try {
stream.close();
} catch (IOException e) {
log(e.getMessage());
}
}
return jasperPrint;
}
private void generarReporte(ExternalContext econtext, String type, JasperPrint jasperPrint) {
JRExporter exporter = null;
HttpServletResponse response = (HttpServletResponse) econtext.getResponse();
FacesContext fcontext = FacesContext.getCurrentInstance();
try {
response.setContentType(type);
if ("application/pdf".equals(type)) {
exporter = new JRPdfExporter();
exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, response.getOutputStream());
} else if ("text/html".equals(type)) {
exporter = new JRHtmlExporter();
exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
exporter.setParameter(JRExporterParameter.OUTPUT_WRITER, response.getWriter());
// Make images available for the HTML output
HttpServletRequest request = (HttpServletRequest) fcontext.getExternalContext().getRequest();
request.getSession().setAttribute(ImageServlet.DEFAULT_JASPER_PRINT_SESSION_ATTRIBUTE, jasperPrint);
exporter.setParameter(JRHtmlExporterParameter.IMAGES_MAP, new HashMap());
// The following statement requires mapping /image
// to the imageServlet in the web.xml.
//
// This servlet serves up images including the px
// images for spacing.
//
// Serve up the images directly so we
// don't incur the extra overhead associated with
// with a JSF request for a non-JSF entity.
exporter.setParameter(JRHtmlExporterParameter.IMAGES_URI, request.getContextPath() + "/image?image=");
} else if ("application/rtf".equals(type)) {
exporter = new JRRtfExporter();
exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, response.getOutputStream());
}
} catch (RuntimeException e) {
throw e;
} catch (Exception e) {
throw new FacesException(e);
}
// Enough with the preliminaries ... export the report already
try {
exporter.exportReport();
} catch (RuntimeException e) {
throw e;
} catch (Exception e) {
throw new FacesException(e);
}
// Tell JavaServer Faces that no output is required
fcontext.responseComplete();
}
26 enero 2009
Netbeans 6.5 y iReport
requisitos para implementar los reportes:
-Netbeans 6.5
-iReport 2.0.1
-jasperreports-1.3.3
deben descargar el proyecto jasperreports-1.3.3, fijense en la carpeta en donde ubican dicho proyecto, ya que usaremos la ruta posteriormente.
ahora entremos en materia
1. debemos crear la libreria en Netbeans, en el IDE nos dirigimos a tools > Libraries
nos aparecerá el administrador de Librerias.
damos clic en New Library, escribimos en nombre de la libreria, en este caso jasper-reports-1.3.3 y selecionas el tipo Class Libraries.
en el administrador de librerias, seleccionamos la jasper-reports-1.3.3, damos clic en el boton Add JAR/Folder
repetimos el paso anterior, pero esta vez, nos vamos al subdirectorio lib y selcionamos los siguientes archivos:
- commons-beanutils-1.7.jar
- commons-collections-2.1.jar
- commons-logging-1.9.2.jar
- commons-digester-1.7.jar
- commons-javaflow-20060411.jar
- Itext-1.3.1.jar
2. Ahora tenemos que indicarle a Netbeans que tipo de archivos tiene que asociar. Nos dirgimos a tools > Options nos aparecerá la siguiente ventana.
en el cuadro de dialogo colocamos jrxml (el tipo de archivo fuente de ireport), y presionamos OK
En las opciones del dropDown Associated File Type (MIME), seleccionamos XML Files (application/xml) y presionamos
Con los pasos anteriores tenemos netbeans configurado con jasperreports, si desemos configurar nuestro proyecto , aca esta la segunda parte del tema Configurar el proyecto




