Java, PL/SQL, Gwt, Spring, Oracle Forms, Unix, y todo lo que se me ocurra, se libre, comparte, el conocimiento es de todos.
miércoles, 16 de diciembre de 2009
Sueños
Han soñado con estar donde siempre tuvieron que haber estado.
No mires nunca hacia atrás. olvídalos.
- Pero cuando regresare nunca?
- Nunca es demasiado tiempo.
Con pasos titubeantes y una mirada un poco triste, regresaras.
- Jamas, donde voy no existe el tiempo.
El tiempo no es importante por ahora, promete que no me vas olvidar.
- Olvidarte jamas.
Quiero que hagas algo por mi que cuentes mi historia a todos, que le digas quien realmente quien soy.
- Quieres volar.
La verdad me marean las alturas.
- Si nunca lo intentas jamas lo sabrás.
Nunca digas nunca.
Ok, prométeme que no me vas a soltar.
- Mira es este el lugar que he creado para ti, te gusta.
No veo nada.
- Tienes que creer y aparecerá justo enfrente de ti.
Como lo haces.
- Jamas guardo nada para el regreso.
Nunca me habías dicho eso.
- Nunca preguntaste.
Quiero regresar este lugar me da miedo.
- Vete, regresa.
Pero dime que sientes.
Miedo.
- Crecer.
Sueños.
- Mi mundo.
Sentimientos, Amor.
- Yo no se que es eso.
Lo sabes lo has sentido por alguien o por algo.
- Jamas
- Vete
Pero necesito que este conmigo....
-No te acuerdas verdad la primera vez que vi tu mundo, era extraño llenas de reglas estúpidas
Pero son mis Padres entiende, lo tengo que hacer, es para cuando sea grande tenga una buena educación, un empleo.
-Solo que lo mejor se hacer mejor es vender sueños.
-Solo que lo mejor de mi eras tu.
-Siempre digo cosas estúpidas, pero en realidad nunca quise lastimarte.
-Este es mi mundo...tu eres mi mundo.
-Siempre los fuiste desde el primer día que te vi brincando y cantando tan feliz, quizas algún día escribire una canción con tu nombre...
Continuara.......
FIN
miércoles, 30 de septiembre de 2009
Mew en México
Es fácil saber que esta vez no me tomaste en encuenta quizás sea tu manera de decir superarlo,..,quizás sea la única manera que conoces para decir que es lo que me merezco...
Alguna vez hace no mucho tiempo solías ser tímida y aburrida, una especie de criatura rara,...,me acuerdo, pero quizás no vale la pena, no se si sueles dar besos tan apasionados, durante viajes cortos, quizás solo dices que soy tierno cuando hay algún camino junto a la ventana...
Siempre suelo hacer muchas cosas sin pensar en ti, pero realmente hoy me di cuenta que nunca recurro a ti, muchos deseos están por el aire, pero serán olvidados, porque quizás siempre tuvieron que estar muertos, pero
los verdaderos recuerdos viajan atravez del tiempo en una especie de maquina, se detienen en el momento menos indicado,
solo para recordarte quien eres,....
....Tiempo..
Hace tres semanas, estaba nuevamente ahí aparado escuchando un sonido tan espectacular, que tengo que recordar por el resto de mi vida..
no importo soportar la lluvia, al llegar valió la pena, era como estar en una cascada, como si alguien corriera tan veloz que nadie pudiera verlo,
como cuando tenia clase de Biología,...,
Me tiraría al piso para sentir el frió sobre mi mejilla, brincaría hasta caer nuevamente de la resbaladilla, caminaría de vez en cuando hasta las tres de la mañana justo antes de amanecer justo cuando esta el alba,...
martes, 23 de junio de 2009
Copiar archivos de maquina a otra con scp (sh)
isaac@mew:~/Escritorio$ scp -r /home/isaac/xml_redes/redcolego_q/ usuario@dominio_o_ip:/usr/local/apache-tomcat-5.5.17/webapps/redes/xml/
y el comando funciona a la perfección solo con un detalle que copio la todos los archivos incluyendo a la carpeta redcolego_q/ dentro de xml/, y yo solo necesitaba copiar el contenido.
Con este comando solo copias el contenido.
scp /home/isaac/xml_redes/redcolego_q/* usuario@dominio_o_ip:/usr/local/apache-tomcat-5.5.17/webapps/redes/xml/
También lo podemos hacer con un .sh le mostrare como, aunque es mas sencillo con con el ejemplo de arriba, con el .sh podemos incluir mas funcionalidades.
Primero necesitamos un keygen y manera de optenerlo es:
Esto es para la maquina donde copiaremos los archivos, de esta manera cuando ejecutemos el comando no pediran el password con cada archivo.
ssh-keygen -t rsa
ssh-copy-id -i ~/.ssh/id_rsa.pub usuario@dominio_o_ip
acontinuación les pedira el password
martes, 16 de junio de 2009
Itex en una aplicación web (Generar pdf)
public void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException
{....}
el cual realiza una acción según sea el caso puede responder con texto plano, html, xml, json ect, pero también puede ocupar el método
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
}
También puede responder de la misma manera que goGet, si nosotros queremos responder con html,json, xml, texto plano, o con un pdf que es al final de cuentas es resp.setContentType("application/pdf") que es un objeto de tipo HttpServletResponse resp que es lo que el servlet de responderá al cliente, como nosotros no sabemos como un cliente puede solicitar nuestro pdf nosotros tendremos que generar un método para ambos
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
}
Que en el caso de netbeans lo hace al crear un servlet, bueno si lo hacen con netbeans borren lo que tenga dentro de ese metodo.
El código es el siguiente:
package pdf.servlet;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.lowagie.text.pdf.PdfPTable;
import com.lowagie.text.pdf.PdfPCell;
import com.lowagie.text.pdf.PdfWriter;
import com.lowagie.text.Document;
import com.lowagie.text.DocumentException;
import com.lowagie.text.Element;
import com.lowagie.text.Paragraph;
/**
*
* @author isaac
*/
public class CrearPdf extends HttpServlet {
/**
* Processes requests for both HTTP <code>GET</code> and <code>POST</code> methods.
* @param request servlet request
* @param response servlet response
* @throws ServletException if a servlet-specific error occurs
* @throws IOException if an I/O error occurs
*/
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
try {
response.setContentType("application/pdf"); // Code 1
Document document = new Document();
PdfWriter.getInstance(document,response.getOutputStream()); // Code 2
document.open();
float[] widths = {25f, 25f, 20f,15f,15f};
PdfPTable table = new PdfPTable(5); //Code 3
table.setHorizontalAlignment(Element.ALIGN_LEFT);
table.setWidthPercentage(100);
PdfPCell cell =new PdfPCell(new Paragraph("Prueba"));
cell.setHorizontalAlignment(Element.ALIGN_CENTER);
cell.setColspan(5);
table.addCell(cell);
table.addCell("Scanned Fax FileName");
cell.setHorizontalAlignment(Element.ALIGN_CENTER);
table.addCell("Corporate Name");
cell.setHorizontalAlignment(Element.ALIGN_CENTER);
table.addCell("Corporate Account");
cell.setHorizontalAlignment(Element.ALIGN_CENTER);
table.addCell("Credit");
cell.setHorizontalAlignment(Element.ALIGN_CENTER);
table.addCell("Debit");
cell.setHorizontalAlignment(Element.ALIGN_CENTER);
document.add(table);
document.close();
}catch(DocumentException e){
e.printStackTrace();
}catch (Exception e) {
// TODO: handle exception
}
}
// <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
/**
* Handles the HTTP <code>GET</code> method.
* @param request servlet request
* @param response servlet response
* @throws ServletException if a servlet-specific error occurs
* @throws IOException if an I/O error occurs
*/
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}
/**
* Handles the HTTP <code>POST</code> method.
* @param request servlet request
* @param response servlet response
* @throws ServletException if a servlet-specific error occurs
* @throws IOException if an I/O error occurs
*/
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}
/**
* Returns a short description of the servlet.
* @return a String containing servlet description
*/
@Override
public String getServletInfo() {
return "Short description";
}// </editor-fold>
}
El web.xml es el siguiente en el caso de Netbeans no es necesario puesto que lo mapea cuando creas el servlet.
<servlet>
<servlet-name>CrearPdf</servlet-name>
<servlet-class>pdf.servlet.CrearPdf</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>CrearPdf</servlet-name>
<url-pattern>/creaPdf</url-pattern>
</servlet-mapping>
y final mente run...
jueves, 11 de junio de 2009
JPanel transparente (Parte 4)
Este es el cogido del borde mejorado:
package vista;
/**
*
* @author isaac legorreta
*/
import java.awt.Color;
import java.awt.GradientPaint;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.geom.RoundRectangle2D;
import javax.swing.JLayeredPane;
public class IPanel extends JLayeredPane
{
private Color color1 = new Color(255,255,255);
private Color color3 = new Color(1,1,1);
private Color color2 = new Color(0,0,0);
private int arcw=25;
private int arch=25;
@Override
protected void paintComponent(Graphics g)
{
Graphics2D g2 = (Graphics2D) g.create();
float x=getWidth();
float y=getHeight();
g2.setPaint(new GradientPaint(0.0f, 0.0f, getColor1().darker(),
0.0f, getHeight(), getColor2().darker()));
g2.fill(new RoundRectangle2D.Double(0, 0, x, y, getArcw(),getArch()));
g2.setPaint(new GradientPaint(0.0f, 0.0f,getColor3(),
getWidth(), getHeight(),getColor3()));
g2.drawRoundRect(0, 0, getWidth()-1 , getHeight()-1, getArcw()-2,getArch()-6);
g2.setPaint(Color.black);
}
public Color getColor3() {
return color3;
}
public void setColor3(Color color3) {
this.color3 = color3;
}
public int getArch() {
return arch;
}
public void setArch(int arch) {
this.arch = arch;
}
public int getArcw() {
return arcw;
}
public void setArcw(int arcw) {
this.arcw = arcw;
}
//Métodos set y get que nos permiten modificar los colores
public Color getColor1() {return color1;}
public void setColor1(Color color1) {this.color1 = color1;}
public Color getColor2() {return color2;}
public void setColor2(Color color2){this.color2 = color2;}
}
Este el código para que el panel sea transparente:
package vista;
import java.awt.AlphaComposite;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
/**
*
* @author Edisoncor
*/
public class IPanelTrans extends IPanel{
private float tran= 0.8f;
@Override
protected void paintComponent(Graphics g) {
Graphics2D g2 = (Graphics2D) g;
g2.setRenderingHint(RenderingHints.KEY_INTERPOLATION,
RenderingHints.VALUE_INTERPOLATION_BILINEAR);
AlphaComposite old = (AlphaComposite) g2.getComposite();
g2.setComposite(AlphaComposite.SrcOver.derive(getTran()));
super.paintComponent(g);
g2.setComposite(old);
}
public float getTran() {
return tran;
}
public void setTran(float tran) {
this.tran = tran;
}
}
Como agragarlo por si tienen duda en su palette hay una opción beans dan click en choose bean, aparecera una pantalla como la siguiente y escriben lo siguiente vista.IPanelTrans despues la arrastran hasta su FormPanel y listo
En la propiedades aparecera un atributo llamado tran por defecto tiene .5 pero pueden cambiarlo...
Bueno en la parte uno explico como agregarlo a un FormPanel y despues a un Frame, como pueden notar no parece transparente, bueno en blog donde tome este codigo esta un JPanel con imagen de fondo tome el código y lo mejore un poco para que puedan agregar una imagen desde las propiedades (ruta), pero eso lo explicare en la parte 5...
miércoles, 10 de junio de 2009
JPanel con Gradiente redondeado (Parte 3)
package vista;
/**
*
* @author isaac legorreta
*/
import java.awt.Color;
import java.awt.GradientPaint;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.geom.RoundRectangle2D;
import javax.swing.JLayeredPane;
public class IPanel extends JLayeredPane
{
private Color color1 = new Color(255,255,255);
private Color color3 = new Color(1,1,1);
private Color color2 = new Color(0,0,0);
private int arcw=25;
private int arch=25;
@Override
protected void paintComponent(Graphics g)
{
Graphics2D g2 = (Graphics2D) g.create();
float x=getWidth();
float y=getHeight();
g2.setPaint(new GradientPaint(0.0f, 0.0f, getColor1().darker(),
0.0f, getHeight(), getColor2().darker()));
g2.fill(new RoundRectangle2D.Double(0, 0, x, y, getArcw(),getArch()));
g2.setPaint(new GradientPaint(0.0f, 0.0f,getColor3(),
getWidth(), getHeight(),getColor3()));
g2.drawRoundRect(0, 0, getWidth()-1 , getHeight(), getArcw(),getArch());
g2.setPaint(Color.black);
}
public Color getColor3() {
return color3;
}
public void setColor3(Color color3) {
this.color3 = color3;
}
public int getArch() {
return arch;
}
public void setArch(int arch) {
this.arch = arch;
}
public int getArcw() {
return arcw;
}
public void setArcw(int arcw) {
this.arcw = arcw;
}
//Métodos set y get que nos permiten modificar los colores
public Color getColor1() {return color1;}
public void setColor1(Color color1) {this.color1 = color1;}
public Color getColor2() {return color2;}
public void setColor2(Color color2){this.color2 = color2;}
}
Espero hacer el panel transparente, pero que no tenga problemas al agregar widgets
lunes, 8 de junio de 2009
JPanel con Gradiente redondeado con widgets de swing para Netbeans (Parte 2)
package vista;
/**
*
* @author isaac legorreta
*/
import java.awt.Color;
import java.awt.GradientPaint;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.geom.RoundRectangle2D;
import javax.swing.JLayeredPane;
public class IPanel extends JLayeredPane
{
private Color color1 = new Color(255,255,255);
private Color color2 = new Color(0,0,0);
private int arcw=25;
private int arch=25;
@Override
protected void paintComponent(Graphics g)
{
Graphics2D g2 = (Graphics2D) g.create();
float x=getWidth();
float y=getHeight();
g2.setPaint(new GradientPaint(0.0f, 0.0f, getColor1().darker(),
0.0f, getHeight(), getColor2().darker()));
g2.fill(new RoundRectangle2D.Double(0, 0, x, y, getArcw(),getArch()));
g2.setPaint(new GradientPaint(0.0f, 0.0f,getColor2(),
getWidth(), getHeight(),getColor1()));
g2.drawRoundRect(0, 0, getWidth() , getHeight(), getArcw()+2,getArch()+2);
g2.setPaint(Color.black);
}
public int getArch() {
return arch;
}
public void setArch(int arch) {
this.arch = arch;
}
public int getArcw() {
return arcw;
}
public void setArcw(int arcw) {
this.arcw = arcw;
}
//Métodos set y get que nos permiten modificar los colores
public Color getColor1() {return color1;}
public void setColor1(Color color1) {this.color1 = color1;}
public Color getColor2() {return color2;}
public void setColor2(Color color2){this.color2 = color2;}
}
Y para agregarlo a su JFrame esta en la parte 1 de este pequeñito tutorial, mas o memos le debería quedar algo como esto.
viernes, 29 de mayo de 2009
JPanel con Gradiente con widgets de swing para Netbeans (Parte 1)
después quede muy sorprendido puesto que la GUI que hice se ve bastante mejor bueno; les explico primero como hacer un panel con gradiente el código fue tomado de muchos blogs el código es este:
package vista;
/**
*
* @author isaac
*/
import java.awt.Color;
import java.awt.GradientPaint;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Rectangle;
import javax.swing.JLayeredPane;
/**
* @author Salazar Reque Miguel
*/
public class IPanel extends JLayeredPane
{
private Color color1 = new Color(255,255,255);
private Color color2 = new Color(0,0,0);
@Override
protected void paintComponent(Graphics g)
{
Graphics2D g2 = (Graphics2D) g.create();
Rectangle clip = g2.getClipBounds();
float x=getWidth();
float y=getHeight();
g2.setPaint(new GradientPaint(0.0f, 0.0f, getColor1().darker(),
0.0f, getHeight(), getColor2().darker()));
g2.fillRect(clip.x, clip.y, clip.width, clip.height);
}
//Métodos set y get que nos permiten modificar los colores
public Color getColor1() {return color1;}
public void setColor1(Color color1) {this.color1 = color1;}
public Color getColor2() {return color2;}
public void setColor2(Color color2){this.color2 = color2;}
}
se preguntaran porque hereda de JLayeredPane y no de JPanel la respuesta es porque lo vamos a agregar a un panel form de netbeans y este panel se pueden soltar y arrastrar puesto que tiene propiedades diferentes a un Jpanel.
Paso 1.
Crear un proyecto en Netbeans.
2. Crear un paquete que se llame vista o como se les de la gana por ejemplo:
influenza.porcina
influenza.marciana
3. Crear una clase que se llama IPanel y copiar el código de arriba.
4. Crear un JPanel Form -> dan click derecho en el paquete de su proyecto, si no aparece esa opción, hay mismo busquen other...
aparecerá una ventana como esta:
den next y pongan el nombre que ustedes quieran en este caso se llamara Panel, el proyecto hasta ahora esta mas o menos así:
4.1 * Vayan por un refresco al Oxxo mas cercano o por una cerveza, y me invitan una vale.
5. Despues como diablos agregar nuestra clase a nuestro Panel una es hacer una jar y agregarlo a la palette de netbeans y otro es ocupar Beans en especial la opción de choose bean, antes compilen todo el pequete vista quieren...
aparecera una venta con un campo de texto:
escriban vista.IPanel y listo tienen su panel con gradiente super chido.
6. pueden hacer mas grande el IPanel o combiar sus colores
click derecho en panel propiedades color1 y color2, como pueden notar los los atributos de nuestra clase IPanel.
7. agregarlo a un JFrame Form
Esta en las opciones del paso 4:
Compilar el paquete vista ir a la papeleta en Beans elegir nuevamente Choose beans escribir ahora vista.Panel
Dar Ok, arrastrarle hasta el JFrame form y listo.
Después vayan a la clase Ventanita denle run y listo, tiene que aparecer algo mas o menos asi.
* el paso 4.1 no es necesario pero te ayudara a relajarte, pero puede hacer que te encuentres con un embotellamiento alcoholico y no te permita terminar este pequeñito proyecto
miércoles, 22 de abril de 2009
wxPython
#!/usr/bin/python
try:
import wx
except ImportError:
raise ImportError,"Se requiere el modulo wxPython"
class simpleapp_wx(wx.Frame):
def __init__(self,parent,id,title):
wx.Frame.__init__(self,parent,id,title)
self.parent = parent
self.initialize()
def initialize(self):
grilla = wx.GridBagSizer()
self.entrada = wx.TextCtrl(self,-1,value=u"Ingrese un texto:", style=wx.TE_PROCESS_ENTER)
grilla.Add(self.entrada,(0,0),(1,1),wx.EXPAND)
self.entrada.Bind(wx.EVT_TEXT_ENTER, self.SiPulsaEnter)
boton = wx.Button(self,-1,label="Pulsame !")
grilla.Add(boton, (0,1))
boton.Bind (wx.EVT_BUTTON, self.SiCliqueaBoton)
self.etiqueta = wx.StaticText(self,-1,label='Hola !')
self.etiqueta.SetBackgroundColour(wx.BLUE)
self.etiqueta.SetForegroundColour(wx.RED)
grilla.Add(self.etiqueta, (1,0),(1,2), wx.EXPAND )
grilla.AddGrowableCol(0)
self.SetSizerAndFit(grilla)
self.SetSizeHints(-1,self.GetSize().y,-1,self.GetSize().y )
self.entrada.SetFocus()
self.entrada.SetSelection(-1,-1)
self.Show(True);
def SiCliqueaBoton(self,event):
self.etiqueta.SetLabel(self.entrada.GetValue() + "Cliqueo el boton!")
self.entrada.SetFocus()
self.entrada.SetSelection(-1,-1)
def SiPulsaEnter(self,event):
self.etiqueta.SetLabel(self.entrada.GetValue() + "Pulso enter!")
self.entrada.SetFocus()
self.entrada.SetSelection(-1,-1)
if __name__ == "__main__":
app = wx.App()
frame = simpleapp_wx(None,-1,'Mi aplicacion')
app.MainLoop()
En esta pagina se explica cada metodo, y como ejecutarlo desde la terminal, les tiene que abrir una ventana como la siguiente:
Adios......
martes, 31 de marzo de 2009
Como configurar GWT-EXT en NetBeans
Paso 1: El mas importante, tener ganas de terminar este pequeñito tutorial.
Paso 2: Copiamos las libreria de js-ext, pero se preguntaran donde diablos esta,
http://yogurtearl.com/ext-2.0.2.zip , la reombramos con js y la copiamos a nuestro proyecto dentro de Web Pages
Después debería estar así:
3. Agregamos el jar de gwtext.jar que esta en el zip en libreries de nuestro proyecto:
Dar click derecho en libreries, ADD jar/Folder.
4. Configuar Main.gwt.xml este archivo esta nuestro MainEntryPoint, este tiene quien es la clase principal que contiene el metodo para iniciar una aplicación gwt, debemos colocar lo siguiente tag :
<inherits name="com.gwtext.GwtExt"/>
<?xml version="1.0" encoding="UTF-8"?>
<module>
<inherits name="com.google.gwt.user.User"/>
<entry-point class="
org.yournamehere.client"/>
<!-- Do not define servlets here, use web.xml -->
<inherits name="com.gwtext.GwtExt"/>
</module>
5. Tomen un descanso
6. Configuarar las librerias de js en html o jsp donde va a estar alojada nuestra aplicación gwt, para este ejemplo sera: welcomeGwt.html, primero borren lo que tienen y copian lo siguiente:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta name='gwt:module' content='org.yournamehere.Main=org.yournamehere.Main'>
<title>Main</title>
<link rel="stylesheet" type="text/css" href="js/resources/css/ext-all.css"/>
<link rel="stylesheet" type="text/css" href="js/resources/css/xtheme-gray.css" />
<script type="text/javascript" src="js/adapter/yui/yui-utilities.js"></script>
<script type="text/javascript" src="js/adapter/yui/ext-yui-adapter.js"></script>
<script type="text/javascript" src="js/ext-all.js"></script>
</head>
<body>
<script language="javascript" src="org.yournamehere.Main/org.yournamehere.Main.nocache.js"></script>
</body>
</html>
7. Llamen a ala policía escucho ruidos extraños en mi cubículo...
En este paquete org.yournamehere.client hay una clase que es la principal-> MainEntryPoint remplacen su código por este:
/*
* MainEntryPoint.java
*
* Created on 17 de junio de 2009, 06:39 PM
*
* To change this template, choose Tools | Template Manager
* and open the template in the editor.
*/
package org.yournamehere.client;
import com.google.gwt.core.client.EntryPoint;
import com.gwtext.client.core.RegionPosition;
import com.gwtext.client.widgets.Panel;
import com.gwtext.client.widgets.TabPanel;
import com.gwtext.client.widgets.Window;
import com.gwtext.client.widgets.layout.BorderLayout;
import com.gwtext.client.widgets.layout.BorderLayoutData;
/**
*
* @author isaac
*/
public class MainEntryPoint implements EntryPoint {
/** Creates a new instance of MainEntryPoint */
public MainEntryPoint() {
}
/**
* The entry point method, called automatically by loading a module
* that declares an implementing class as an entry-point
*/
public void onModuleLoad() {
TabPanel tabPanel = new TabPanel();
tabPanel.setActiveTab(0);
Panel tab1 = new Panel();
tab1.setTitle("Bogus Tab");
tab1.setHtml(getBogusMarkup());
tab1.setAutoScroll(true);
Panel tab2 = new Panel();
tab2.setTitle("Another Tab");
tab2.setHtml(getBogusMarkup());
tab2.setAutoScroll(true);
Panel tab3 = new Panel();
tab3.setTitle("Closable Tab");
tab3.setHtml(getBogusMarkup());
tab3.setAutoScroll(true);
tab3.setClosable(true);
tabPanel.add(tab1);
tabPanel.add(tab2);
tabPanel.add(tab3);
//west panel
Panel navPanel = new Panel();
navPanel.setTitle("Navigation");
navPanel.setWidth(200);
navPanel.setCollapsible(true);
BorderLayoutData centerData = new BorderLayoutData(RegionPosition.CENTER);
centerData.setMargins(3, 0, 3, 3);
BorderLayoutData westData = new BorderLayoutData(RegionPosition.WEST);
westData.setSplit(true);
westData.setMargins(3, 3, 0, 3);
westData.setCMargins(3, 3, 3, 3);
final Window window = new Window();
window.setTitle("Layout Window");
window.setClosable(true);
window.setWidth(600);
window.setHeight(350);
window.setPlain(true);
window.setLayout(new BorderLayout());
window.add(tabPanel, centerData);
window.add(navPanel, westData);
window.setCloseAction(Window.HIDE);
window.show();
}
private static String getBogusMarkup() {
return "
Lorem ipsum dolor sit amet, consectetuer adipiscing elit. " +
"Sed metus nibh, sodales a, porta at, vulputate eget, dui. " +
"In pellentesque nisl non sem. Suspendisse nunc sem, pretium eget, " +
"cursus a, fringilla vel, urna.";
}
}
Primero crea un TabPanel con tres pestañas y después es agregado ala ventana en la posición del centro atravez de:
BorderLayoutData centerData = new BorderLayoutData(RegionPosition.CENTER);
centerData.setMargins(3, 0, 3, 3);
También contiene otro panel en zona oeste que es agregado a la ventana con:
BorderLayoutData westData = new BorderLayoutData(RegionPosition.WEST);
westData.setSplit(true);
westData.setMargins(3, 3, 0, 3);
westData.setCMargins(3, 3, 3, 3);
8 . Run al archivo welcomeGwt.html despues tendran algo como esto:
Como ven es facil se pueden hacer aplicaciones bastantes vistosas, ademas de ser rapidas, depues explicare como comunicar estas GUI mediante RPC con aplicaciones cliente servidor...
Continuara
ComboBox remoto con GWT-EXT (json,jsp) con Java
sql:
select cvetpocit,nomtpocit from reftpocit
el modelo seria algo como esto:
/**
*
* @author isaac
*/
public class Citacion {
private String cve;
private String nombre;
public String getCve() {
return cve;
}
public void setCve(String cve) {
this.cve = cve;
}
public String getNombre() {
return nombre;
}
public void setNombre(String nombre) {
this.nombre = nombre;
}
}
el contenedor hecho con una conexion jdbc de java:
import conexion.connectionSelGWT;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
import xxx.xxx.client.referencia.modelo.Citacion;
/**
*
* @author isaac
*/
public class ContenedorTpoCitacion {
private Connection conexion;
private Statement instruccion;
public ContenedorTpoCitacion() throws SQLException {
connectionSelGWT conectaBase = new connectionSelGWT();
conexion = conectaBase.conectBase();
}
public List<Citacion> getTpoCitacion() throws SQLException{
List<Citacion> list = new ArrayList<Citacion>();
String query = "select cvetpocit,nomtpocit from reftpocit";
instruccion = conexion.createStatement();
ResultSet resultados2 = instruccion.executeQuery(query);
while (resultados2.next()) {
Citacion citacion = new Citacion();
citacion.setCve(resultados2.getString(1));
citacion.setNombre(resultados2.getString(2));
list.add(citacion);
}
resultados2.close();
conexion.close();
return list;
}
}
import java.sql.*;
import java.util.Vector;
/**
* A Class class.
*
* @author Mew
*/
public class connectionSelGWT{
private Connection conexion;
public Connection conectBase(){
String URL = "jdbc:oracle:thin:@suip_o_localhost:1521:su_SID";
String userid = "su_usuario";
String password= "su_pass";
connect();
try {
conexion = DriverManager.getConnection(URL, userid, password);
}catch (SQLException E) {
return conexion=null;
}
return conexion;
}
}
El contenedor:
import conexion.connectionSelGWT;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
import xxxx.xxx.referencias.modelo.Citacion;
/**
*
* @author isaac
*/
public class ContenedorTpoCitacion {
private Connection conexion;
private Statement instruccion;
public ContenedorTpoCitacion() throws SQLException {
connectionSelGWT conectaBase = new connectionSelGWT();
conexion = conectaBase.conectBase();
}
public List
List
String query = "select cvetpocit,nomtpocit from reftpocit";
instruccion = conexion.createStatement();
ResultSet resultados2 = instruccion.executeQuery(query);
while (resultados2.next()) {
Citacion citacion = new Citacion();
citacion.setCve(resultados2.getString(1));
citacion.setNombre(resultados2.getString(2));
list.add(citacion);
}
resultados2.close();
conexion.close();
return list;
}
}
La clase que crea la estructura del json para la vista:
import java.sql.SQLException;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import xxx.xxx.client.referencia.modelo.Citacion;
/**
*
* @author isaac
*/
public class JsonCitacion {
public String getTpsCitacion() throws JSONException, SQLException{
ContenedorTpoCitacion con = new ContenedorTpoCitacion();
List<Citacion> list = con.getTpoCitacion();
JSONObject jsonObj = new JSONObject();
jsonObj.put("totalCount",list.size()+"");
JSONArray array = new JSONArray();
for(Citacion ci:list){
JSONObject jsonDatos = new JSONObject();
jsonDatos.put("cve",ci.getCve());
jsonDatos.put("nombre",ci.getNombre());
array.put(jsonDatos);
}
jsonObj.put("datos",array);
return jsonObj.toString();
}
public static void main(String[] args) {
JsonCitacion json = new JsonCitacion();
try {
System.out.println(json.getTpsCitacion());
} catch (JSONException ex) {
Logger.getLogger(JsonCitacion.class.getName()).log(Level.SEVERE, null, ex);
} catch (SQLException ex) {
Logger.getLogger(JsonCitacion.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
la estructura que recibiria el combo de GWT-EXT seria la siguiente:
{"totalCount":"2","datos":[{"nombre":"Periodica","cve":"1"},{"nombre":"No Periodica","cve":"2"}]}
* las xxx son paquetes con nombre de mi trabajo pero bien le pueden poner otro nombre, es para que no vean donde trabajo jijijiji+++++.
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@page import="xxx.xxxx.referencias.mc.JsonCitacion"%>
<%@page import="java.sql.SQLException"%>
<%@page import="org.json.*"%>
<% JsonCitacion json = new JsonCitacion(); try { out.print(json.getTpsCitacion()); } catch (JSONException ex) { } catch (SQLException ex) { } %>
HttpProxy dataProxy = new HttpProxy("jsoncitas.jsp");
RecordDef recordDef = new RecordDef(new FieldDef[]{
new StringFieldDef("cve", "cve"),
new StringFieldDef("nombre", "nombre")
});
JsonReader reader4 = new JsonReader(recordDef);
reader4.setRoot("datos");
reader4.setTotalProperty("totalCount");
Store store5 = new Store(dataProxy, reader4);
store5.load();
final ComboBox cbCitacion = new ComboBox();
cbCitacion.setStore(store5);
cbCitacion.setForceSelection(true);
cbCitacion.setMinChars(1);
cbCitacion.setFieldLabel("Tipo citación");
cbCitacion.setDisplayField("nombre");
cbCitacion.setMode(ComboBox.REMOTE);
cbCitacion.setTriggerAction(ComboBox.ALL);
cbCitacion.setEmptyText("Enter tpo citación");
cbCitacion.setLoadingText("Searching...");
cbCitacion.setTypeAhead(true);
cbCitacion.setSelectOnFocus(true);
cbCitacion.setWidth(200);
cbCitacion.setHideTrigger(false);
cbCitacion.addListener(new ComboBoxListenerAdapter() {
public void onSelect(ComboBox comboBox, Record record, int index) {
String tpoCita = Integer.parseInt(record.getAsString("cve"));
MessageBox.alert("hola "+tpoCita);
}
});
jueves, 26 de marzo de 2009
exist base de datos nativa
isaac@mew:~$ java -jar eXist-setup-1.2.5-rev8668.jar
claro antes deben posicionarse en la ruta donde esta el jar
para levantar la base:
isaac@mew:~$ cd /home/isaac/eXist/bin/
isaac@mew:~/eXist/bin$ nohup ./startup.sh &
[1] 15683
isaac@mew:~/eXist/bin$ nohup: se ignora la entrada y se añade la salida a «nohup.out»
isaac@mew:~/eXist/bin$
la linea un rojo es muy importante puesto que crea un proceso que no depende del proceso que lo lanzo en este caso el shell asi cuando cierren la terminal, la bd exist seguira viva
y para matarla
isaac@mew:~/eXist/bin$ ./shutdown.sh
Cosechador OAI en java
http://www.oclc.org/research/software/oai/harvester.htm
miércoles, 25 de marzo de 2009
Pincel de firefox, prototipos
miren quedan bastantes padres:
https://addons.mozilla.org/es-ES/firefox/addon/8487
grid en jquery con jsp y json (java)
de este link lo pueden descargar http://www.trirand.com/blog/?page_id=6
Bueno primero creamos un proyecto web en cualquier IDE yo ocupe Netbeans, para ese ejemplo lo llamaremos Cliente (Es un clásico):
Como un tip cuando vayan a crear un bean con sus getters y setters no es necesario crear cada get y set por cada atributo netbeans milagrosamente nos ayuda (jijiji+++)
solo den click derecho y después insert code y despues crear getter y setter
Bueno esto los ayudara mucho pero de todas maneras pongo el código:
package modelo;
import java.util.Date;
/**
*
* @author isaac
*/
public class Cliente {
private String cve;
private Date date;
private String nombre;
private double cantidad;
private double tax;
private double total;
private String notas;
public double getCantidad() {
return cantidad;
}
public void setCantidad(double cantidad) {
this.cantidad = cantidad;
}
public String getCve() {
return cve;
}
public void setCve(String cve) {
this.cve = cve;
}
public Date getDate() {
return date;
}
public void setDate(Date date) {
this.date = date;
}
public String getNombre() {
return nombre;
}
public void setNombre(String nombre) {
this.nombre = nombre;
}
public String getNotas() {
return notas;
}
public void setNotas(String notas) {
this.notas = notas;
}
public double getTax() {
return tax;
}
public void setTax(double tax) {
this.tax = tax;
}
public double getTotal() {
return total;
}
public void setTotal(double total) {
this.total = total;
}
}
depues para crear el json el codigo es el siguiente: bueno antes la estructura del json que debemos crear es la siguiente:
{"total":"1","page":"1","rows":[{"id":"1","cell":["1","Wed Mar 25 15:16:35 CST 2009","Josue Isaac 0"
,"100.0","10.0","110.0","Salva al mundo usa JAVA 0"]},{"id":"2","cell":["2","Wed Mar 25 15:16:35 CST
2009","Josue Isaac 1","101.0","11.0","112.0","Salva al mundo usa JAVA 1"]},{"id":"3","cell":["3","Wed
Mar 25 15:16:35 CST 2009","Josue Isaac 2","102.0","12.0","114.0","Salva al mundo usa JAVA 2"]}],"records"
:"3"}
Pueden crear esta estructura con su base datos, pero no entrare en detalles:
package json;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import modelo.Cliente;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
/**
*
* @author isaac
*/
public class Json {
public static String construlleJson() throws JSONException{
List
for(int i=0;i < cliente =" new">
cliente.setCve((i+1)+"");
cliente.setDate(new Date());
cliente.setNombre("Josue Isaac "+i);
cliente.setCantidad(100+i);
cliente.setTax(10+i);
cliente.setTotal(cliente.getCantidad()+cliente.getTax());
cliente.setNotas("Salva al mundo usa JAVA "+i);
listCliente.add(cliente);
}
JSONObject jsonObj = new JSONObject();
jsonObj.put("page","1");
jsonObj.put("total","1");
jsonObj.put("records", listCliente.size()+"");
JSONArray array = new JSONArray();
for(Cliente cliente:listCliente){
JSONObject jsonDatos= new JSONObject();
jsonDatos.put("id",cliente.getCve());
JSONArray arrayCell = new JSONArray();
arrayCell.put(cliente.getCve());
arrayCell.put(cliente.getDate());
arrayCell.put(cliente.getNombre());
arrayCell.put(cliente.getCantidad()+"");
arrayCell.put(cliente.getTax()+"");
arrayCell.put(cliente.getTotal()+"");
arrayCell.put(cliente.getNotas()+"");
jsonDatos.put("cell",arrayCell);
array.put(jsonDatos);
}
jsonObj.put("rows",array);
return jsonObj.toString();
}
public static void main(String[] args) throws JSONException {
System.out.println(Json.construlleJson());
}
}
Las lineas en rojo es donde creo una lista de clientes la cual servirá para crear la estructura del json pero ustedes pueden crear un cotenedor que les retorne una lista de Clientes, o con lo quieran llenar su grid, desde su bd. La linea en azul es el objeto principal json y el que retornamos al final, el código de jsp es este:
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@page import="json.Json"%>
<%@page import="org.json.*"%>
<%
String stringJson="";
try {
stringJson = Json.construlleJson();
} catch (JSONException ex) {
out.print("{\"totalCount\":0,\"datos\":[]}");
}
out.println(stringJson);
%>
el html o jsp que contrenda el grid de jquery tendra lo siguiente:
<html> <head> <title>jqGrid Demo</title>
<link rel="stylesheet" type="text/css" media="screen" href="eder/themes/basic/grid.css" />
<link rel="stylesheet" type="text/css" media="screen" href="eder/themes/jqModal.css" />
<script src="eder/jquery.js" type="text/javascript"></script>
<script src="eder/jquery.jqGrid.js" type="text/javascript"></script>
<script src="eder/js/jqModal.js" type="text/javascript"></script>
<script src="eder/js/jqDnR.js" type="text/javascript"></script>
<script type="text/javascript">
function load()
{
jQuery("#list2").jqGrid({ url:'json.jsp', datatype: "json", colNames:['Inv No','Date', 'Client', 'Amount','Tax','Total','Notes'], colModel:[ {name:'id',index:'id', width:55}, {name:'invdate',index:'invdate', width:90}, {name:'name',index:'name asc, invdate', width:100}, {name:'amount',index:'amount', width:80, align:"right"}, {name:'tax',index:'tax', width:80, align:"right"}, {name:'total',index:'total', width:80,align:"right"}, {name:'note',index:'note', width:150, sortable:false} ], rowNum:10, rowList:[10,20,30], imgpath: 'eder/themes/basic/images', pager: jQuery('#pager2'), sortname: 'id', viewrecords: true, sortorder: "desc", caption:"JSON Example" }).navGrid('#pager2',{edit:false,add:false,del:false});
}
</script>
</head>
<body onload="load()">
<table id="list2" class="scroll"></table>
<div id="pager2" class="scroll" style="text-align:center;"></div>
</body>
</html>
la estructura del proyecto seria la siguiente:
Al final el grid se debe paser a este:
Adios...
martes, 24 de marzo de 2009
TOMCAT Character Encoding
En tu jsp:
String paramEncoding =application.getInitParameter("PARAMETER_ENCODING");
request.setCharacterEncoding(paramEncoding);
Despues configura el arhivo web.xml de tu aplicación con lo siguiente:
La otra opcion es editar el archivo server.xml que se encuentra por lo general en ubuntu en:
isaac@mew:~$ cd /var/lib/tomcat5.5/conf
isaac@mew:/var/lib/tomcat5.5/conf$ ls
Catalina context.xml server-minimal.xml tomcat-users.xml
catalina.policy logging.properties server.xml tomcat-users.xml~
catalina.properties policy.d tomcat5.5 web.xml
isaac@mew:/var/lib/tomcat5.5/conf$
lo pueden abrir con vi o gedit y agregar la siguiente linea en Connector
URIEncoding="UTF-8"
aqui esta el ejemplo:
<context-param>
<param-name>PARAMETER_ENCODING</param-name>
<param-value>UTF-8</param-value>
</context-param>
Adios....
viernes, 13 de marzo de 2009
Tutorial de hibernate
paso, como crear un proyecto con hibernate con eclipse.
http://renevielma.blogspot.com/2008/05/tutorial-de-hibernate.html
bueno adios.
Recuperar sesiones hibernate con c3po
Hace un par de días me encontré con un problema con hibernate ocupando en pool mi clase anterior era esta.
package org.util;
/
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
/**
*
* @author mew
*/
public class SessionFactorySingleton {
private static SessionFactory sf = null;
/**
* crea una sesion que utiliza todo el programa
*/
private SessionFactorySingleton(){
}
public static SessionFactory getSessionFactory(){
if(sf == null){
sf = new Configuration().configure().buildSessionFactory();
}
return sf;
}
}
Pero lo que pasaba esque el pool de c3po no administraba bien las conexiones, y en un blog encontre este conexion
package org.util;
/**
*
* @author isaac
*/
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.cfg.Configuration;
/**
* Configures and provides access to Hibernate sessions, tied to the
* current thread of execution. Follows the Thread Local Session
* pattern, see {@link http://hibernate.org/42.html }.
*/
public class SessionFactory {
/**
* Location of hibernate.cfg.xml file.
* Location should be on the classpath as Hibernate uses
* #resourceAsStream style lookup for its configuration file.
* The default classpath location of the hibernate config file is
* in the default package. Use #setConfigFile() to update
* the location of the configuration file for the current session.
*/
private static String CONFIG_FILE_LOCATION = "hibernate.cfg.xml";
private static final ThreadLocal threadLocal = new ThreadLocal();
private static Configuration configuration = new Configuration();
private static org.hibernate.SessionFactory sessionFactory;
private static String configFile = CONFIG_FILE_LOCATION;
private SessionFactory() {
}
/**
* Returns the ThreadLocal Session instance. Lazy initialize
* the SessionFactory if needed.
*
* @return Session
* @throws HibernateException
*/
public static Session getSession() throws HibernateException {
Session session = (Session) threadLocal.get();
if (session == null || !session.isOpen()) {
System.out.println("<<<<<<<<<>>>>>>>");
if (sessionFactory == null) {
rebuildSessionFactory();
}
session = (sessionFactory != null) ? sessionFactory.openSession()
: null;
threadLocal.set(session);
}
return session;
}
/**
* Rebuild hibernate session factory
*
*/
public static void rebuildSessionFactory() {
try {
configuration.configure(configFile);
sessionFactory = configuration.buildSessionFactory();
} catch (Exception e) {
System.err
.println("%%%% Error Creating SessionFactory %%%%");
e.printStackTrace();
}
}
/**
* Close the single hibernate session instance.
*
* @throws HibernateException
*/
public static void closeSession() throws HibernateException {
Session session = (Session) threadLocal.get();
threadLocal.set(null);
if (session != null) {
session.close();
}
}
/**
* return session factory
*
*/
public static org.hibernate.SessionFactory getSessionFactory() {
return sessionFactory;
}
/**
* return session factory
*
* session factory will be rebuilded in the next call
*/
public static void setConfigFile(String configFile) {
SessionFactory.configFile = configFile;
sessionFactory = null;
}
/**
* return hibernate configuration
*
*/
public static Configuration getConfiguration() {
return configuration;
}
}
Esta conexion es mucho mas eficiente y con la ayuda de c3po ayuda bastante.
Mi configuracion de C3PO es la siguiente:
<property name="hibernate.c3p0.acquire_increment">1</property>
<property name="hibernate.c3p0.idle_test_period">120</property>
<property name="hibernate.c3p0.timeout">180</property>
<property name="hibernate.c3p0.max_size">20</property>
<property name="hibernate.c3p0.min_size">0</property>
<property name="hibernate.c3p0.max_statements">0</property>
<property name="hibernate.c3p0.preferredTestQuery">select 1;</property>
Le puse en 0 hibernate.c3p0.min_size porque aquí donde trabajo se ponen locos si ven una conexión mucho tiempo, pero ustedes deben hacer sus pruebas, dependiendo de muchos factores:
* Su mapeo de hibernate (contiene muchos Many-to-Many,lazy,ect)
* El hql,o sql mas pesado, de su proyecto,para saber el costo de su qury pueden ocupar en oracle esto:
explain plan for SELECT campos FROM tabla
y para ver el peso del query select * from plan_table
* Tomar el tiempo del Query mas pesado.
En los controles, contenedores, cerrar las conexiones este es muy importante.
miércoles, 4 de marzo de 2009
TIM BURTON - La Melancólica Muerte del Chico Ostra y Otras Historias
a este artista de pensamiento macabro,con pelo enmarañado y gesto turbado,que nos cuenta historias de personajes insanos
que tienen tijeras y aletas en lugar de manos,nunca jamás se le ocurra disfrazarse de humano- Tim burton
jueves, 19 de febrero de 2009
EL día perfecto (HULK)
Mmmm, si por ejemplo hoy me pare a las 8 de la mañana, como ya termine la Fac. ni modo a trabajar si no despues no hay para las fiestas, bueno salgo de mi casa escuchando algo de musica empiezo bien el dia escuchando algo de aerosmith, algo de pixies, bueno despues de un rato escucho una canción que me hace recordar la prepa, enserio y sin pensarlo derrepende me acuerdo de todas las estupideses que hacia, bueno en particular me acorde hoy de una:
Ya lo denomino LA HULK
Pero diran que pex, como que HULK si no es el tipo verde, que se pone como loco cuando alguien quiere tirarse a su vieja (jijiji+++), es broma, bueno resulta que es una chava, bueno la ecuación seria algo como esto:
alcohol + chava(judith) + pleitos de amor = HULK
Si la chava se puso bien ebria, un cuate creo que Simon le quito su zapato, derrepente cambio su color se puso verde, empezo hablar idiomas bastante raros incluso para alguien que estudia lenguas, bueno empezo a correr como loca, y como buenos cuates la empezamos a corretear, cuando derrepente paso lo peor, se metio al baño y su novio con una mangera la baño con agua, salio un moustruo verde con ojos rojos, como yo era el mas cerca que le digo a la bestia verde -oye Judith ya callate o te.... el moustruo contesto o te... que babaso me vas a golpear (bueno si lo pense, pero nunca lo haría), cuando volteo HULK que me da un golpaso en mi cara, corrio sangre de mi labio, y las vestias verde se fue (bueno de hecho se quedo piendome disculpas , pero estaba tan enojado que no la pelaba)....
Bueno depues relatare mas estupides, noñadas de la fac, y cosas que voy recordando...
martes, 10 de febrero de 2009
Confortantes sonidos
Como pude conseguí el disco frengers... y de inmediato mi percepción musical cambio para siempre...
Recuerdo la primera vez que escuche comforting sounds:
La voz suave , pensando en que diria la letra... si hablaría de ira, amor, celos o quizas traición...
Poco a poco, encontré mi canción perfecta para pensar en ella, para correr baja la lluvia, para quitarme la ropa y decir que no me siento bien pesando en la dulzura de ella, por que nada es tan perfecto, ya, mas que la soledad, y por cada segundo que pasaba escuchándola le encontraba nuevos significados...
Como si alguien a travez del lente estuviera mirando todo aquello que tire todo por la borda, que siempre hacemos promesas que rompemos, que quizas jugamos sucio, para llegar a verla, o mejor aun pensamos que nada tiene sentido mas que la soledad...
Corriendo y jugando como cuando eres niño, mintiendo de aquello de lo que no queremos ser lastimados, para nunca jamas tener sucias las manos,...
Estando en el lugar de siempre, junto a mi familia y niki, tratando de entender el mundo, todo parece ser raro, extrañas reglas, tan estúpidas como tontas, pensando y recordando todas las aventuras que vivi por tres años con mis amigos, parece que el tiempo se detuvo en ese instante la canción...
La voz de Jonas deja de sonar, para dar parte a lo mejor de la canción, se llena de notas musicales, el teclado, la bateria, el bajo, la guitarra...Forman una ecuación diferencial perfecta, una ecuación rara de la place con la que puedes crear con las terminos perfectos una vida ideal, se llena de alegría y nostalgia, dan ganas de volar, al mismo tiempo llorar, no sabes cuando terminara, pero la gozas con tanta emoción que quisiera que fuera eterna...
Y cuando termina te dan ganas de intentarlo de nuevo...
viernes, 23 de enero de 2009
GWT-EXT, Combo box, remoto con jsp's
HttpProxy dataProxy = new HttpProxy("EvaluacionJson.jsp?respuesta=revista");
RecordDef recordDef = new RecordDef(new FieldDef[]{
new StringFieldDef("clave", "clave"),
new StringFieldDef("name", "name"),});
JsonReader reader = new JsonReader(recordDef);
reader.setRoot("datos");
reader.setTotalProperty("totalCount");
Store store = new Store(dataProxy, reader, true);
store.reload();
ComboBox cbRevista = new ComboBox("Revista");
cbRevista.setStore(store);
cbRevista.setTitle("Revistas existentes");
cbRevista.setDisplayField("name");
cbRevista.setId("clave");
cbRevista.setMode(ComboBox.REMOTE);
cbRevista.setTriggerAction(ComboBox.ALL);
cbRevista.setLoadingText("Buscando...");
cbRevista.setWidth(300);
cbRevista.setEmptyText("-SELECCIONE UNA REVISTA-");
cbRevista.addListener(new ComboBoxListenerAdapter() {
public void onSelect(ComboBox comboBox, Record record, int index) {
String cveRev = record.getAsString("clave");
}
});
Podemos agregar el combo a un formpanel o aun panel, despues esta el listener del combo que escucha los eventos del combo con record.getAsString("clave") extraen el clave del combo.
El jsp :
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@page import="org.siir.json.JsonEvaluacion"%>
<%@page import="org.json.*"%>
<%
String respuesta = request.getParameter("respuesta");
if(respuesta.equals("revista")){
JsonEvaluacion jsonEvaluacion= new JsonEvaluacion();
String stringJson="";
try {
stringJson = jsonEvaluacion.obtenRevistasCandidatas();
} catch (JSONException ex) {
out.print("{\"totalCount\":0,\"datos\":[]}");
}
out.println(stringJson);
}
%>
el json:
package org.siir.json;
import java.util.List;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import org.siir.client.modelo.hemeroteca.RevistaExistente;
import org.siir.contenedor.ContenedorRevistaCandidata;
/**
*
* @author isaac
*/
public class JsonEvaluacion {
public String obtenRevistasCandidatas() throws JSONException{
ContenedorRevistaCandidata contenedorRev= new ContenedorRevistaCandidata();
List
JSONObject jsonObj = new JSONObject();
jsonObj.put("totalCount", listRev.size()+"");
JSONArray array = new JSONArray();
for(RevistaExistente rev:listRev){
JSONObject jsonDatos = new JSONObject();
jsonDatos.put("name",rev.getNombreRevista());
jsonDatos.put("clave",rev.getClave()+"");
array.put(jsonDatos);
}
jsonObj.put("datos",array);
return jsonObj.toString();
}
public static void main(String[] args) throws JSONException {
JsonEvaluacion jsonEvaluacion= new JsonEvaluacion();
System.out.println(jsonEvaluacion.obtenRevistasCandidatas());
}
}
el contenedor: claro esta tienen que iniciar una session hibernate, y todo ese choro, pueden reemplazar todo esto por un contenedor con sql, y con resultset construllen la lista de RevistaExistente
public List
Session s = sF.openSession();
Transaction tx = s.beginTransaction();
Query q = s.createQuery("from RevistaExistente p where p.estadoRevista = 1" );
List
tx.commit();
s.close();
return respuesta;
}
el modelo:
public class RevistaExistente implements IsSerializable {
private Long clave;
private String nombreRevista;
con sus getters y setters...