agosto 15, 2005

Struts & frames

Volvemos a un post algo más técnico. A raiz de una pregunta por email que me han hecho estos días, he recordado un post en theserverside.com, sobre "struts and Frames". Mucha gente que usa frames para las aplicaciones junto con Struts nos hemos enfrentado un poco a la problemática que supone. En ese post explicaba la posición que habíamos tomado en un proyecto de desarrollo, para minimizar la complejidad del tratamiento de los frames.

We suppose the form data is ONLY needed for the action, so the action executes and change the model as needed. The action decides which is the next page, and if it can have frames it sets a variable "next" in session, which indicates what the frames that must be loades in this way:

Every frame in frameset is redirected to an special action frames.do with two parameters: the place where the frame is loaded and the "next" variable.
For example:

<frameset id="vis" cols="261,*" border="0" framespacing="1">
<frame name="bottomLeft" src="frames.do?position=frameBottom&action=<session:attribute name="next">">
<frame name="bottomRight" src="frames.do?position=frameTop&action=<session:attribute name="next">">
</frameset>

And we have implemented the frames.do action to know which JSP must be loaded, with parameters position and next. In fact, the page that must be loaded is written in struts-config.xml in this way:

<action path="/frames" type="package.FramesAction" name="framesForm" scope="request">
<forward name="frameTop-next1" contextrelative="true" path="/WEB-INF/jsp/jsp1.jsp">
<forward name="frameTop-next2" contextrelative="true" path="/WEB-INF/jsp/jsp2.jsp">
....


So the frames.do makes a forward to the String created with "position+next" (the two parameter of frames.do) and we can establish the JSP in the xml file...


De esta manera conseguíamos el no preocuparnos por el frame al que era dirigido una acción, pues la misma acción podía ser implementada por la misma clase, y devover JSPs con frames diferentes según el nivel del frame al que fuese dirigido. Las redirecciones desde HREFs o SUMBMITs ya simplemente se indicaban en el target.

Con esto también conseguiamos la vuelta atrás de manera sencila aunque implicase el cambio de varios frames, por que la acción de "frames.do" almacenaba los anteriores vistas y era capaz de reponerlas en el lugar adecuado.

2 comentarios:

  1. Hola Joserra,

    soy nueva en esto de struts y estoy tratando de hacer una aplicación que utilice frames, ¿sería posible que compartieras parte de tu código donde se explique la lógica que realizas en frames.do?


    De antemano gracias

    ResponderEliminar
  2. Pues me temo que a estas alturas no... ni estoy en la misma empresa... y diría que ni me acuerdo! :) lo siento!

    ResponderEliminar