Mi cursada - UNQ‎ > ‎Clases‎ > ‎Bitácoras‎ > ‎Bitácoras 2011 S2‎ > ‎

Clase 8 - Wicket Parte 1

publicado a la‎(s)‎ 12 oct. 2011 16:41 por gisela decuzzi   [ actualizado el 12 oct. 2011 16:45 ]

Modelo 2 de Java

MVC:

  • Model: java

  • View: jsp

  • Controller: servlet

Y no nos parecio tan feliz como el Arena porque nuestros controlles no se bindeaban contra un modelo y la metáfora

Hablamos de que no resultaba sencillo reutilizar en esta arquitectura llegamos a la conclusión de que las abstracciones estan orientadas al protocolo que usamos y no a los componentes que manejamos.

Entonces no es sencillo implementar cosas como:

  • una grilla reordenable

  • combos encadenados


Arriba de este protocolo se paran otros fwks y modelan estos componentes, vamos a ver Apache Wicket que ya hizo mucho de esto por nosotros.

Wicket

Creación de un proyecto wicket

  1. new MVN project

  2. (elegimos el archetype) wicket-archetype-quickstart

  3. le damos un nombre al grupo y al artefacto

Lo que sigue es opcional pero altamente recomnsable

  1. Revisamos que el proyecto se haya generado bien (esten las dependencias, la estructura sea correcta)

  2. Deployamos la aplicación en el servidor y lo iniciamos para revisar que no haya ningun problemaen el ambiente



Las aplicaciones Wicket modelan un obeto Aplicación, que extiende de WebApplication, funciona como un singleton y todo lo que sea transversal a la aplicación va a estar en este objeto.

Nos obliga a implementar:

  • getHomePage

    • Devuelven una página (Wicket también modela el objeto Page que representa a nuestra página)



WebPage:

Nuestras páginas van a extender de WebPage y va a ser ahi donde lo configuremos y agreguemos nuestros componentes (componente, componente, componente) para los que no se acurden repasen el patron composite.

Cada página tiene asociado un markup (un archivo html que por default se llama igual al nombre del componente). En estos markups NO podemos poner código Java.

Wicket tiene sus propios bindeos que vincula el html con el componente Java. Para mostrarlo Wicket va a instanciar nuestro objeto página y a reemplazar el valor del componente por el dinámico.


En un ejemplo:

(En el constructor de una página)

String laVersion= “BLAH”;

add(new Label(“version”, laVersion));


(En la vista de esa página)

<span wicket:id=”version”>valor por default</span>


Datos importantes:

  • La idea de Wicket es que todos tus componentes están presentes en la vista. Es decir que la renderización de componentes es uno a uno cada compenente que está en el html está en la clase java. Por lo que:

    • si agregan un componente en la clase si no lo muestran en el html (y estan ejecutando en modo developer) les va a tirar un error.

    • si en el html agregan componentes que no estan en la clase java va a tirar un error

    • si referencian mas de una vez el mismo id de componente va a tirar un error


En wicket la vista es tanto el html como la clase java.


Vimos algunas cosas de Wicket y la afinidad a las inner classes. Y de alguna manera hablamos sobre la decisión de que los componentes por default de Wicket son abstractos y prefieren la estrategia de herencia por sobre composición por lo que por lo general cuando instanciamos algunos componentes como por ejemplo un Link nos obliga a dar una implementación concreta o definir el comportamiento al hacer el click y esto se logra redefiniendo el método onClick.


Vimos que los bindings no son tan directos y que por default Wicket asume que el componente no va a cambiar pero nos permite crear nuestros propios modelos.

Por ejemplo:

new Label(“contador”,miVariable)

el contador tiene un contenido estático que vale lo que vale la variable al momento de instanciación.

Es diferente a definirle explicitamente un modelo:

new Label(“contador”, new PropertyModel(this, “contador”));

PropertyModel es una clase concreta que nos da Wicket (que se parece mas a un controller por mas que se llame Model) que asocia un objeto con una propiedad. De esta forma ahora nuestro label quedo bindeado.

Más sobre modelos de Wicket pueden seguir leyendo acá

Wicket es un framework stateful en contraposición a algunas cosas que hablabamos la clase pasada que era stateless (REST).













Comments