# ZK Framework

ZK es un framework de aplicaciones web en AJAX de código abierto, completamente en Java, que permite la creación de interfaces de usuario para aplicaciones web sin usar JavaScript y con poca programación.
El núcleo de ZK es un mecanismo conducido por eventos basado en AJAX, sustentado sobre 123 componentes XUL y 83 componentes XHTML, y un lenguaje de marcación para diseñar interfaces de usuario. Los programadores diseñan las páginas de su aplicación en componentes XUL/XHTML ricos en características, y los manipulan con eventos disparados por la actividad del usuario final. Es similar al modelo de programación encontrado en las aplicaciones basadas en GUI de escritorio.
ZK utiliza el acercamiento llamado centrado-en-el-servidor para la sincronización de componentes y el pipelining entre clientes y servidores se haga automáticamente por el motor, y los códigos de Ajax sean completamente transparentes para los desarrolladores de aplicaciones web. Por lo tanto, los usuarios finales obtienen una interacción y respuesta similar a las de una aplicación de escritorio, mientras que la complejidad del desarrollo es similar a la que tendría la codificación de aplicaciones de escritorio.
Además de la programación basada en componentes y orientación a eventos, de manera similar a Swing, ZK soporta un lenguaje de marcación para la definición de una potente interfaz de usuario llamada ZUML.

## Ventajas, desventajas
### Ventajas

* ZUML permite a los no expertos diseñar eficientemente interfaces de usuario.
* Empotrar script en Java ayuda al prototipado rápido y a las personalizaciones.
* No es necesario que el desarrollador tenga conocimientos de Ajax o JavaScript.
* Modelo basado en componentes intuitivo dirigido por eventos.
* Permite centrar toda la lógica de programación en el servidor.

### Desventajas

* No es apropiado para:
** Videojuegos de acción.
** Aplicaciones basadas en gráficos vectoriales o tridimensionales
** Programas de edición fotográfica o de video
* Tampoco es apropiado para aplicaciones accesibles al público en general que requieran:
** Ser optimizadas en los motores de búsquedas mediante técnicas SEO
** Alto nivel de accesibilidad que exija que dicha aplicación deba funcionar con el javascript del navegador desactivado

### Diferencias con XUL

* Aunque soporta muchos de los componentes XUL, ZK los renderiza en etiquetas HTML.
** Esto significa que no cuenta con el poder del motor de renderización XUL Gecko el cual está empotrado en Mozilla/Firefox.
** ZK es compatible con navegadores que no soportan XUL, tales como Internet Explorer.
** ZK mantiene su propio Look and feel entre los navegadores. Es independiente del look and feel del motor de renderización XUL de Gecko
* ZK no soporta todos los atributos de XUL e introduce algunas extensiones propietarias.

## Requisitos del sistema

* J2RE versión 1.4 o posterior
* Un servidor web capaz de soportar servlets

## Requisitos de habilidades en programación
### Imprescindible

* Conocimiento Básico de Java
* Conocimiento Básico de HTML y XUL
* (Deseable) Conocer JSF

### Recomendado

* Programación Orientada a Objetos
* Programación con Servlet/JSP
* Ajax
* JavaScript

## ZUML

ZUML (Lenguaje de Marcación de Interfaz de Usuario ZK) es un lenguaje de marcación para definición de interfaces de usuario ricas.
* ZUML está diseñado para habilitar a desarrolladores, para que desarrollen interfaces de usuario eficientemente.
* ZUML permite al desarrollador mezclar diferentes lenguajes de marcación, tales como el lenguaje XUL de Mozilla y XHTML, todos en la misma página.
* ZUML permite a los desarrolladores embeber script en lenguaje Java puro(interpretado por BeanShell) y usar expresiones EL para manipular los componentes y acceder a los datos.
* ZUML está soportado por ZK.