Bienvenido a re-orientation! Esperamos que encuentres lo que buscas

Controlando el flujo de navegación con AccionProxy

Parte del Manual para la creación, paso a paso, de una aplicación web Java MVC totalmente operativa sin el uso de frameworks


Continuando con la descripción de la operativa del método creaAction de AccionProxy.

Controlando el flujo de navegación:

Una vez la acción se ha ejecutado, la respuesta de la ejecución (en forma de "verdadero o falso") se almacena en la variable lógica RespAccExe, true si la acción se ejecutó de manera controlada y false si de la ejecución resultó un error inesperado.

En función de si la acción se ha ejecutado correctamente o no, se recuperan los parámetros correspondientes (resultType y resultValue) asociados al "true" o al "false" y se crea un nuevo loop (en caso que el resultado sea una acción) o se sale del bucle despachando a la página configurada.

Bloque de código con la evaluación de RespAccExe:

				if (RespAccExe.equals(true))
				{ 
					tipoRespAccExe =  confAcc.getProperty(nombAcc + ".true.resultType");
					if (tipoRespAccExe != null ){ tipoRespAccExe = tipoRespAccExe.trim(); }
					
					valorRespAccExe = confAcc.getProperty(nombAcc+".true.resultValue");
	                if ( valorRespAccExe != null ) { valorRespAccExe = valorRespAccExe.trim(); }
					
					if (tipoRespAccExe.equals("action")) { 

						otraAcc = true;
		                nombAcc = valorRespAccExe;
						
					} else {
						try { 
							otraAcc = false;
							request.getRequestDispatcher("/"+ valorRespAccExe).forward(request, response);
							break;
						} catch (Exception e) {  System.out.println(" error en forward: " + e.getMessage()); }
					}
					
				} else if (RespAccExe.equals(false)) {
					
					tipoRespAccExe =  confAcc.getProperty(nombAcc + ".false.resultType");
					if (tipoRespAccExe != null ){ tipoRespAccExe = tipoRespAccExe.trim(); }
					
					valorRespAccExe = confAcc.getProperty(nombAcc+".false.resultValue");
	                if ( valorRespAccExe != null ) { valorRespAccExe = valorRespAccExe.trim(); }
					
					if (tipoRespAccExe.equals("action")) { 

						otraAcc = true;
		                nombAcc = valorRespAccExe;
						
					} else {
						try { 
							otraAcc = false;
							request.getRequestDispatcher("/"+ valorRespAccExe).forward(request, response);
							break;
						} catch (Exception e) {  System.out.println(" error en forward: " + e.getMessage()); }
					}

				}

Siguiendo la lógica de nuestro caso de uso de ejemplo:

Al finalizar su ejecución la instancia ListarLibrosCuento y ser el resultado de la misma positivo/verdadero (en RespAccExe), se evalúan los parámetro de configuración listarLibrosDeCuentoDisponibles.true.resultType y listarLibrosDeCuentoDisponibles.true.resultValue, que en este caso indican que el resultado de esta acción es otra acción de nombre "listarCualquierLibroDisponible".

Así que la variable local nombAcc se carga con el nuevo valor ("listarCualquierLibroDisponible") y se adjudica a la variable lógica local otraAcc el valor "verdadero", lo que implicará que le bucle do-while se reinicie, esta vez para la nueva acción.

Una vez ejecutada la nueva acción, cuando lleguemos al mismo punto donde se evalúan resultType y resultValue encontraremos que la configuración indica que el resultado de esta acción es una página jsp con el nombre "respuesta.jsp", con lo que a otraAcc se le da el valor "false", se hace un forward la vista asociada y se interrumpe el bucle.

Terminos Tecnología: