Empezando con Facelets

Estoy teniendo mis primeros contactos con Facelets, un sistema de plantillas para JavaServer Faces, lo que sería un tiles para struts.

Ha sido bastante fácil utilizar Facelets en una micro-aplicación de ejemplo de JSF, sobre todo gracias a la buena documentación que tiene el proyecto.

Para utilizarlo me ha sido necesario modificar lo siguiente:
-La configuración de web.xml poniendo un context-param javax.faces.DEFAULT_SUFFIX con value .html y otro facelets.DEVELOPMENT con value a true para tener, durante el desarrollo, salida de debug por el navegador.
-La de faces-config.xml poniéndole un view-handler, com.sun.facelets.FaceletViewHandler.
-Crear un template para las vistas.
-Modificar los nombres de archivos que utilizan JSF de .jsp a .html y en los archivos modificar lo necesario para dejarlos
con el formato de páginas facelets, quitando los taglib y f:view...
-Y modificando también las reglas de navegación de faces-config, cambiándoles la extensión de los archivos de .jsp a .html.

Una de las cosas que me ha parecido muy buena idea dentro de Facelets, es el poder utilizar de una forma alternativa los tags de jsf, al menos para los componentes del core de JSF pero supongo que para cualquier otro, utilizando etiquetas html de siempre con un atributo jsfc que dice cuál es el tag JSF que debe renderizar. Lo que a un diseñador/maquetador creo que le facilita bastante la vida al no tener que aprenderse los tags de JSF.

Liberado Zend Framework 1.0

Me entero en barrapunto que Zend, creadores del lenguaje PHP, ha liberado por fin la versión 1 de Zend Framework.

Para quien no lo conozca, es un framework que trabaja sobre PHP5 y está orientado a objetos, y entre otras cosas implementa el patrón MVC, más detalles en su web.
Creo que la última vez que seguía los diferentes frameworks que implementaban el patrón MVC en PHP, Zend Framework todavía estaba en la 0.3, y entonces fué después de Symfony el que más me gustó.

Habrá que ver si a nivel de empresarial y desarrollos libres, empiezan o han empezado ya a despegar estos frameworks y cuál predomina. Lo más lógico es que acabe siendo el de Zend aunque me parece a mi que nos queda código spaghetti para un buen rato, a no ser que se adapte PHP6 más rápido que PHP5(no lo creo) ya que dicen que será orientado a objetos sin compatibilidad hacia los malos vicios.

Clase XHConn

Hasta ahora no he utilizado librerías javascript, únicamente algún componente configurable (calendario, autocompletado...), quizás porque no soy un apasionado de javascript y no las he trasteado, además de que utilizando algunos de esos componentes me he tenido que liar con su código para modificar algún detalle a mi gusto.

Cosa que nunca me ha pasado con la clase XHConn, que es una sencilla clase que soluciona los problemas de las compatibilidades entre navegadores al crear un objeto XMLHTTPRequest, y nos ahorra ese trabajo.

Su uso es muy sencillo, sólo tiene un método, connect al que se le pasan la url, el method(POST/GET), parametros de la url y la función de callback

Aquí un ejemplo:

//Instanciamos el objeto
var con = new XHConn();
//Comprobamos que el navegador tenga soporte al objeto XMLHTTPRequest
if (!con) alert("El navegador no soporta el objeto XMLHTTPRequest.");
//Definimos la función de callback
var fnWhenDone = function (obj) { alert(obj.responseText); };
//Llamamos al método connect
con.connect("urldeejemplo.php", "POST", "parametro1=a¶metro2=b", fnWhenDone);

Curiosidad con un array JSON

Últimamente estoy empezando a utilizar JSON en vez de XML para recuperar datos con llamadas al objeto XMLHTTPRequest.
Trasteando, me he encontrado al devolver un array de objetos , que me daba un error en Iexplorer mientras que en Firefox funcionaba correctamente.

Esto se debía a un error mío, simplemente, a que me había colado al montar el array en el lado del servidor poniendo una coma ',' al final del último objeto del array y explorer contaba como si tuviera un objeto más, mientras que firefox no.

Ej:

{"menuitem": [
{"value": "New", "onclick": "CreateNewDoc()"},
{"value": "New", "onclick": "CreateNewDoc()"},
]}

En vez de:

{"menuitem": [
{"value": "New", "onclick": "CreateNewDoc()"},
{"value": "New", "onclick": "CreateNewDoc()"}
]}

El error era mío, esto está claro, ¿pero no sería más lógico que los dos navegadores, al hacer el eval(), dieran error de javascript?, ¿o cuál sería el comportamiento más correcto?