martes, 8 de julio de 2008

Añadir código PHP al blog

Si deseas aportar una ayuda a los demás visitantes y quieres comentar algo de código (PHP, ASP, JSP, etc) y tienes problemas al mostrarlo porque tu navegador reconoce esa parte de código como código propio usa la siguiente tabla para escribir símbolos como '<','>'.

Enlace.

Formulario que adjunte ficheros y controle tldes, eñes (ñ) y simbolos extraños

Buenas, yo estuve pegándome con un problema que tenía a la hora de elaborar un formulario dinámico que también adjuntara ficheros; el problema erea que cuando ponía a elegir entre el turno de "mañana" o el de "tarde", si se seleccionaba el de "mañana" recibía "ma#na", un símbolo extraño como 'ñ' (y a veces se comia la siguiente letra), asímismo hacia lo mismo con las tildes, º y demás simbolos extraños.

El problema me lo daba el atributo 'enctype="multipart/form-data"' del FORM que nos permite adjuntar ficheros, por lo tanto si lo quitamos nos traducirá bien los caracteres "extraños" pero no me dejaría adjuntar ficheros o por el contrario añadir el atributo enctype pero no tener controlado las tildes, eñes, etc.

Después de buscar entre varias páginas vi que en la mayoría llegaban a la misma conclusión, la codificicación.

En un foro resuelven el tema de la codificación comprobando que tipo de codificación se hace mediante una función, pero a mi no me solucionaba nada puesto que mi formulario no es estático y no dispongo de campos fijos que verificar.

Acto seguido encuentro otro en el que lo solucionan añadiendo en la cabecera (HEAD) lo siguiente:

<meta equiv="Content-Type" content="text/html;charset=UTF-8">

Pero no me dió resultados.

Buscando por el amplio mundo de internet descubrí un atributo llamado "accept-charset" del formulario (FORM) que permite cambiar la codificación.

Tan solo hay que añadir a nuestro FORM el atributo 'accept-charset="utf-8"'

<form id="formUserData" name="formUserData" action="/usuarios/guardar/" method="post" accept-charset="utf-8">

A mi me funcionó, quizás alguna de las tres opciones propuestas te puedan servir a la hora de realizar un formulario que permita adjuntar ficheros.

miércoles, 2 de julio de 2008

Vuelta al mundo...

Pues después de mi estancia en París y tras haber estado en la World Wide Invitational 2008 de Blizzard y haber disfrutado con todo lo que había montado, ahora me toca posar los pies en la tierra y empezar otra vez con el trabajo.

A ver si tengo tiempo y pongo algo nuevo que tengo esto 1 poco abandonado.

Saludos.

viernes, 30 de mayo de 2008

Plantillas en Groovy

Las plantillas se harán en dos partes, una que se hará en la parte del Groovy, que es donde cargaremos todos los datos y donde generaremos nuestra plantilla y otra parte será la plantilla en si, que en este caso lo haremos con OpenOffice.

En la parte del Groovy necesitamos que nos manden un mapa del tipo [clave,valor], por ejemplo ["Nombre","Juan"](Recordad que en el mapa podeis meter varia claves asi como nombre, apellidos, etc.), y una vez recibido el mapa y sabiendo donde esta la plantilla que vamos a usar solo nos faltaría generar el código:

def mapa=asociaNombresCampo(datos);//CREA UN MAPA DEL TIPO mapa[clave:valor];
DocumentTemplateFactory templateFactory = new DocumentTemplateFactory();
File templateFile=getTestFile("plantilla.odt");
try{
File openDocumentFile = grabarFichero();
DocumentTemplate template= templateFactory.getTemplate(templateFile);
templateFile.deleteOnExit();
template.createDocument(mapa, new FileOutputStream(openDocumentFile));
}catch (Exception e){}



protected File grabarFichero() throws IOException {
String rutaDestino= "rutadestino";
File tempFile = new File(rutaDestino+"nombrePlantilla.odt");
return tempFile;
}


En el apartado de la plantilla, sólo nos faltaría definir cómo queremos que sea nuestra apariencia y decirle que asocie los datos que hemos mandado en el mapa a valores en nuestra plantilla. Para eso pulsaremos CTRL+F2 y en la pestaña de Functions, seleccionar Text Field. Poned un nombre que sea recibido, por ejemplo 'Nombre!', (el signo '!' sirve para decirle que este parametro puede venir vacio, si no lo haces dara un error). Ahora solo faltaría darle un nombre representativo para que asocies ese campo y te acuerdes a que parametro está asociado.

En este ejemplo vamos a hacer una plantilla de un carnet, por lo tanto sólo nos vendra un mapa del tipo clave valor de una persona.

Usaremos algo así:

Titular: Nombre* Apellido1* Apellido2*
Teléfono de contacto: Telefono*

*: Campos asociados al mapa.

Para la plantilla usaremos OpenOffice.
Para hace que se rellene con datos que le hemos mandados debemos pulsar CTR+F2 y nos momstrará una venta como la siguiente:

Pulsaremos en la pestaña FUNCTIONS, y seleccionamos el Input Field. Ahora pondremos uno de las claves que recibimos, en este caso recibimos un nombre, por lo tanto escribiremos 'nombre!' (la ! sirve para que no de fallos si viene vacio o nulo).


Ahora ya sabe que recibe un valor llamado nombre, al pulsar en insert nos pedirá que le pongamos un nombre para hacerle referencia, ponedle 'Nombre' para saber que recibiremos el nombre.


Una vez que aceptemos ya tendremos asignado a nuestra plantilla un nombre que será introducido por nuestra aplicación.
Cerramos esta ventana y nos marcará a nuestro campo 'Nombre' con un fondo más oscuro.


Bueno, ya sabemos introducir un campo, tan solo hace falta repetir esta operación tantas veces como necesitemos cojer datos de nuestro mapa. Por ejemplo pondremo los Apellidos para poner el nombre completo en este ejemplo. Y también añadiremos un telefono de contacto, por lo tanto nuestra aplicación quedará:



Ya sólo nos faltaría el diseño de nuestra plantilla, es decir si vamos ha hacer un carnet deberíamos recortar un poco para que quede más ancho que largo y ponerle una imagen de fondo.

Esto último os lo dejo a ustedes, que va a gusto del consumidor.

miércoles, 21 de mayo de 2008

Converter

Las clases destinadas a realizar conversiones deberán implementar la interfaz Converter, que tiene dos métodos:

▪ Object getAsObject(FacesContext context, UIComponent component, String newValue)
▪ String getAsString(FacesContext context, UIComponent component, Object value)

En el primero de ellos convierte una cadena de texto a un objeto, y en la segunda al contrario, de un objeto a una cadena de texto.

Por lo tanto podemos ahcer que recibiendo un idUsuario podramos mostrar los datos de Nombre + Apellidos, por ejemplo.

Para ello debemos agregar en nuestro fichero de configuracion face-config:


Y para usarlo debemos añadir en nuestro jsp:


Otros recursos:

· Adictos al trabajo.

lunes, 28 de abril de 2008

Seam 2

Aunque aún no hay anuncio oficial de JBoss, ya puedes descargarte la segunda versión de este framework para creación de aplicaciones web en java. Para los que no lo conozcan, Seam es un producto creado por Gavin King el creador de Hibernate y que busca la creación rápida de aplicaciones web java. Para ello utiliza una herramienta llamada seam-gen que te genera a partir de tablas en una base de datos una aplicación CRUD (create, read, update, delete) totalmente funcional con tecnologías estándar de JEE como JSF para la vista, EJB3 para la lógica del negocio y JPA para la persistencia y tecnologías de JBoss como Hibernate Validation o JBoss jBPM para definir el flujo de tu aplicación.

En esta nueva versión encontrarás las siguientes características:

  • Seam WS que permite que un componente Seam sea un servicio web
  • Creación de componetes Seam con Groovy
  • Independencia de JSF, por lo que en teoría puedes usar cualquier otro framework web para tu capa de vista
  • Soporte para Google Web Toolkit
  • Integración con Hibernate Search
  • Soporte para transacciones no JTA
  • Integración de Ajax4JSF

Esta sacado de javaHispano

Guia JBoss Seam

Descargas necesarias:

Eclipse for Java EE Developers (segunda entrada)
http://www.eclipse.org/downloads/


Intenta descarga las ultimas GAs en la pagina de JBoss.

JBoss Seam 2.0.X
http://labs.jboss.com/jbossseam/download/index.html

And the JBoss Application Server 4.2.X
http://labs.jboss.com/jbossas/downloads/

Necesitarás una Base de Datos(BD), uaremos MySQL. Descargate los JDBC Driver.
http://dev.mysql.com/downloads/connector/j/5.0.html

Extrae estos archivos donde quieras pero ten en cuenta no usar espacios " " u otros carateres especiales “áä”.

En este ejemplo se usara la ruta “C:\Development”. Crea una nueva carpeta de WorkSpace (WS) aquí.

Ahora los ficheros quedaran tal que así:


Descarga e instalación de la BD.

Descargate la MySQL Database de esta página:

http://dev.mysql.com/downloads/mysql/5.0.html

Ahora necesitamos echar a andar nuestra BD.

Ejecuta el setup y usa la instalación "typical". Al final de la configuración del setup de MySQL server, elije "Standard Configuration". No cambies nada en las próximas ventanas. Ahora ponle un nombre al roor y su contraseña para esta BD. En este ejemplo se usará "mysql". Pasa a la siguiente ventana y termina el proceso.

Setup de JBoss Seam y crear un nuevo proyecto.

Necesitarás crear un nuevo proyecto Seam. Para ello:

Introduce en el símbolo del sistema (Tecla de Windows +R-> introduce "cmd"):
Diríjete a “C:” y muevete hasta el directorio del JBoss Seam
“cd C:\Development\jboss-seam-2.0.X.GA”. (recuerda comprobar al version y la ruta donde lo tienes guardado)

Ahora es tiempo de ejecutar el setup.

Tipo: “seam setup”

Seam nos da la bienvenida pero quiere saber algunas cosas sobre nuetro proyecto.


Introduce la ruta de tu WorkSpace. En este caso usaremos el siguiente:
“C:\Development\workspace”

Introduce el directorio donde esta el JBoss Application Server
“C:\Development\jboss-4.2.2.GA”

Dale un nombre al proyecto:
“MyFirstSeamProj”

RichFaces estan bien. Pulsa intro.

El BlueSky también esta bien. Pulsa intro.

EAR, tambiém. Pulsa intro.

Introduce el nombre del paquete de tu sesion de Beans.

“com.mydomain.MyFirstSeamProj.session”

Introduce el nombre del paquete de las "entities" de los Beans.

“com.mydomain.MyFirstSeamProj.entity”

El paquete de test está bien. Intro.

Este caso usaremos como BD MySQL, así que introduciremos “mysql”.

Los Dialect están bien. Intro.

Ruta del JDBC driver. En este caso son:

“C:\Development\mysql-connector-java-5.0.8\mysql-connector-java-5.0.8-bin.jar”

Estos son las clases de los drivers, Pulsa intro.

Introduce la conexión URL de la BD.

En este caso usaremos el test en la BD MySQL.

“jdbc:mysql://localhost:3306/test”

El nombre de usuario “root” y la contraseña “mysql”.

No hay catalogo de DBen este caso. Intro.

No hay tablas hechas. Intro.

Deseo mantener las tablas. Enter.

El setup ha terminado. Fue mucho trabaho, así que.. donde está el proyecto?
Aun no hay proyecto. Introduce en la consola del sistema:

Enter “seam create-project”

Aquí lo tienes!

Suficiente consola por el momento....


Empezar con Eclipse

Empezamos con Eclipse y elegimos nuestro WS “C:\Development\workspace”.

Cierra la pantaña de bienvenida (si aún no lo has hecho)

Crea un nuevo proyecto java. File => New => Project.. => Java => Java Project

Elije “Create project from existing source” e introduce la ruta de tu proyecto Seam “C:\Development\workspace\MyFirstSeamProj”.

Introduce el mismo nombre “MyFirstSeamProj” y pulsa “Finish”.



Añadiremos la pestaña de servidores, para ellos pulsamos en Windows-> Show View -> Other y escribimos server y seleccionamos la que se llama "servers"

Ahora selecciona la pestalla de “Servers”. Botón derecho y seleccionamos "new".

Eleji JBoss v4.2. Introduce el directorio donde tienes guardado tu JBoss “C:\Development\jboss-4.2.2.GA”, luego “Finish”.

Arranca el servidor pulsando “Start”.

Abre el proyecto, boton derecho en el archivo build.xml y pulsa "Run as" -> "ant build".

Un error a ocurrido! Porqué? La ventana de archivos del sistema no quiere un fichero y un directorio con el mismo nombre.



Paramos el server.

Abrimos el explorador y vamos a :“C:\Development\jboss-4.2.2.GA\server\default\deploy” y borramos nuestro ear MyFirstSeamProj.ear.

Lo intentamos otra ver. Encendemos el server. Esto va mejor.



Ahora es tiempo de abrir una página de nuestro proyecto Seam.

Abre el navegador e introduce: http://localhost:8080/MyFirstSeamProj/

Aquí lo tienes nuestro primer proyecto Seam.

Tener el ejemplo corriendo

Ahora es tiempo de probar un ejemplo del Seam. Vamos a usar el ejemplo de registrar.

Ve a “C:\Development\jboss-seam-2.0.1.GA\examples\registration”
Loa archivos están en “\src\org\jboss\seam\example\registration”

Copia Register.java, RegisterAction.java e insertalos en tu proyecto Eclipse src/action en el paquete “com.mydomain.MyFirstSeamProj.session”.

Otro error ocurrió! Bueno, es el mismo que antes, pero ahora nosotros tenemos una ventana adicional.

Es la ventana de sistema de windows otra vez.

Ve a “C:\Development\jboss-4.2.2.GA\server\default\deploy” vuelve a borrar el archivo ear “MyFirstSeamProj.ear”. El error se debe de haber solventado.

Vuelve al Eclipse y haz nuevos paquetes en “src/model” y nombralos “com.mydomain.MyFirstSeamProj.entity”. Copia “User.java” desde el ejemplo a este paquete.

Ahora debemos corregir la entrada del paquete en los ficheros fuente del proyecto de eclipse a “com.mydomain.My…”. En “RegisterAction.java” tienes que importar User desde “com.mydomain.MyFirstSeamProj.entity.User”. Guarda todos los ficheros.

Vuelve a la raíz del directorio del ejemplo de Registration y copia todos los archivos desde el view folder de tu proyecto eclipse y sobrescribe los que ya existan.

Usa el metodo deploy.

Abre tu navegador otra vez http://localhost:8080/MyFirstSeamProj/ .


El ejemplo de registrar esta ya funcionando.

Pero esta seguro que nada hay ido mal, para y enciende el servidor en eclipse otra vez.

Ahora puedes registrar usuarios ene el navegador y mira en tu BD con el query browser.


Esta guia a sido sacada de:
http://techieexchange.wordpress.com/2008/02/01/how-to-make-jboss-seam-work-with-eclipse-for-windows/ (inglés).