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]