martes agosto 19, 2003 En los post anteriores hablabamos sobre el patron front controller, ( tambien hablaron Al y Álvaro). Este post es un poco largo y contiene bastante codigo. Para ver un esquema que sigue el flujo de una peticion ver esta secuencia y para ver un diagrama de las clases finales ver aqui. En este post seguire con dos aspectos que deje fuera:
public class AccionResult {
private String nombre="";
private String path="";
private boolean forward=true;
/**
* Constructores
*/
public AccionResult(String nombre, boolean forward){
this.nombre=nombre;
this.forward=forward;
}
public AccionResult(String nombre, String path, boolean forward){
this.nombre=nombre;
this.path=path;
this.forward=forward;
}
..... Metodos Getters y Setters
public AccionResult accion();
public void enrutar(AccionResult aResult, HttpServletRequest request,
HttpServletResponse response){
if (aResult.isForward()){
// Lanzo un forward con la request y un response
try {
this.getServletContext().getRequestDispatcher(response.encodeURL(aResult.getNombre())).forward(request,response);
} catch (ServletException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}else{
// Redirecciono a la nueva URL
try {
response.sendRedirect(aResult.getNombre());
} catch (IOException e) {
e.printStackTrace();
}
}
}
public interface AccionListener {
public String doBeforeAccion() throws ServletException;
public String doAfterAccion() throws ServletException;
}
Existe una clase abstracta apartir de la que heredan todos los eventos AccionEvent :
public abstract class AccionEvent implements AccionListener {
public static final int BEFORE_ACCION=0,AFTER_ACCION=1;
int tipoEvento;
public AccionEvent(int tipoEvento) {
this.tipoEvento=tipoEvento;
}
.....Metodos Getters y Setters
}
public void dispararEvents(int tipoEvento);
public void addEventListener(AccionListener aListener);
public void removeEvent(AccionListener aListener);
protected List eventListeners = new ArrayList();
public void dispararEvents(int tipoEvento) {
Iterator i = eventListeners.iterator();
AccionEvent aListener = null;
while (i.hasNext()) {
aListener =(AccionEvent) i.next();
try{
if (aListener.getTipoEvento()==tipoEvento)
aListener.doBeforeAccion();
else if (aListener.getTipoEvento()==tipoEvento)
aListener.doAfterAccion();
}catch(ServletException se){
System.out.println("Error al lanzar un Evento del tipo " + tipoEvento);
}
}
}
.... Los otros dos metdos .....
}
Resumiendo el esquema de las clases queda asi. Ya podeis despedazarme por los errores que he cometido. ¿Algun problema de concepto?. ¿Alguna sugerencia?
( ago 19 2003, 06:31:30 PM CEST )
Permalink
Comentarios [3]
Bueno, he tardado y no estoy en perfectas condiciones para examinar este post con todo detalle, pero tiene buena pinta. La verdad, algún día puedes ir reuniendo el resultado de esto en un documento más completo.
Enviado por Al en agosto 23, 2003 a las 10:36 AM CEST #
Acabo de ver el texto que has puesto invitando a asistir al congreso. Joder, así que eso e slo que tu esperas del congreso?, Cervezas?. Que desilusión! ;-)
Enviado por Al en agosto 23, 2003 a las 10:38 AM CEST #
Hombre tambien esperaba algunos potes :-P, que no solo de cerveza vive el hombre.
Ya sabia yo cuando estaba posteando que no iba a dar tanto juego como el anterior, porque este ha salido un poco espesito. Y el tema resulta mas complejo, y con demasiado codigo.
En cuanto al documento ... ummm ... de acuerdo, eso si cuando lo tenga esbozado , espero una lluvia criticas en la lista de drafts, sobre todo por no sacar algo con muchas tonterias.
De todas formas al menos tengo pensado otros dos post: uno sobre AccionForms(o algun sistema parecido) y otro sobre una especie de clase de AbstractCache que ayude al cacheado (a cual mas pesado :-), pero la verdad es que he aprendido mucho con los dos que llevo y como soy muy curioso.
PD : Eso si espero criticas mas duras, que es como mas se aprende. Y eso va para todos.
Enviado por Akuma en agosto 23, 2003 a las 03:53 PM CEST #