Apache Wicket , comúnmente conocido como Wicket , es un marco de aplicación web basado en componentes para el lenguaje de programación Java conceptualmente similar a JavaServer Faces y Tapestry . Fue escrito originalmente por Jonathan Locke en abril de 2004. La versión 1.0 se lanzó en junio de 2005. Se convirtió en un proyecto de alto nivel de Apache en junio de 2007. [2]
Los marcos tradicionales de modelo-vista-controlador (MVC) funcionan en términos de solicitudes completas y páginas completas. En cada ciclo de solicitud, la solicitud entrante se asigna a un método en un objeto controlador , que luego genera la respuesta saliente en su totalidad, generalmente extrayendo datos de un modelo para completar una vista escrita en un marcado de plantilla especializado . Esto mantiene el flujo de control de la aplicación simple y claro, pero puede dificultar la reutilización del código en el controlador.
Por el contrario, Wicket sigue estrechamente el modelo de marcos GUI con estado como Swing . Las aplicaciones Wicket son árboles de componentes , que utilizan delegados de escucha para reaccionar a las solicitudes HTTP contra enlaces y formularios de la misma manera que los componentes Swing reaccionan a los eventos de pulsación de teclas y del mouse. Wicket se clasifica como un marco basado en componentes.
Wicket utiliza XHTML simple para las plantillas (lo que impone una separación clara entre la presentación y la lógica empresarial y permite editar las plantillas con herramientas de diseño WYSIWYG convencionales [3] ). Cada componente está vinculado a un elemento con nombre en XHTML y se vuelve responsable de representar ese elemento en la salida final. La página es simplemente el componente contenedor de nivel superior y está emparejada exactamente con una plantilla XHTML. Usando una etiqueta especial, un grupo de componentes individuales se puede abstraer en un solo componente llamado panel , que luego se puede reutilizar completo en esa página, en otras páginas o incluso en otros paneles.
Cada componente está respaldado por su propio modelo, que representa el estado del componente. El marco no tiene conocimiento de cómo interactúan los componentes con sus modelos, que se tratan como objetos opacos serializados automáticamente y persistidos entre solicitudes. Sin embargo, los modelos más complejos pueden hacerse desmontables y proporcionar ganchos para organizar su propio almacenamiento y restauración al principio y al final de cada ciclo de solicitud. Wicket no exige ninguna capa ORM o persistencia de objetos en particular , por lo que las aplicaciones a menudo usan alguna combinación de objetos Hibernate [ cita necesaria ] , EJB o POJO como modelos.
En Wicket, todo el estado del lado del servidor se gestiona automáticamente. Nunca debes usar directamente un objeto HttpSession o un contenedor similar para almacenar el estado. En cambio, el estado está asociado con componentes. Cada componente de la página del lado del servidor contiene una jerarquía anidada de componentes con estado, donde el modelo de cada componente es, al final, un POJO (objeto Java antiguo simple).
Wicket busca la simplicidad. No hay archivos de configuración para aprender en Wicket. Wicket es una biblioteca de clases simple con un enfoque consistente para la estructura de componentes.
Una aplicación Hello World Wicket, con cuatro archivos:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transicional//EN" " http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns= "http ://www.w3.org/1999/xhtml" xmlns:wicket= "http://wicket.apache.org/dtds.data/wicket-xhtml1.3-strict.dtd" xml:lang= "en" lang = "es" > <body> <span wicket:id= "message" id= "message" > El mensaje va aquí </span> </body> </html>
paquete org.wikipedia.wicket ; importar org.apache.wicket.markup.html.WebPage ; importar org.apache.wicket.markup.html.basic.Label ; public class HolaMundo extiende la página web { /** * Constructor */ public HolaMundo () { agregar ( nueva etiqueta ( "mensaje" , "¡Hola mundo!" )); } }
paquete org.wikipedia.wicket ; importar org.apache.wicket.protocol.http.WebApplication ; clase pública HelloWorldApplication extiende WebApplication { /** * Constructor. */ aplicación pública HolaMundo () { } /** * @see org.apache.wicket.Application#getHomePage() */ public Class getHomePage () { return HolaMundo . clase ; } }
<?xml versión="1.0" codificación="UTF-8"?> <aplicación web xmlns:xsi= "http://www.w3.org/2001/XMLSchema-instance" xmlns= "http://java .sun.com/xml/ns/javaee" xmlns:web= "http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation= "http://java.sun .com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id= "WebApp_ID" version= "2.5" > <display-name> Ejemplo de wicket </ nombre-mostrado> <filtro> <nombre-filtro> HelloWorldApplication </nombre-filtro> <clase-filtro> org.apache.wicket.protocol.http.WicketFilter </clase-filtro> <param-init> <nombre-param > applicationClassName </param-name> <param-value> org.wikipedia.wicket.HelloWorldApplication </param-value> </init-param> </filter> <filter-mapping> <filter-name> HelloWorldApplication </filter -nombre> <patrón-url> /* </ patrón-url> </filtro-mapping> </web-app>
Los componentes básicos como formularios, enlaces, repetidores, etc. están integrados.
Página web oficial