- Dos vistas (pantallas): pintado de formulario y recepción de formulario
- Un objeto java formulario que encapsula al formulario HTML
- Dos controladores que escuchan su url correspondiente
- Dos reglas de navegación para el mostrado de las pantallas en función del resultado de cada accion/controlador
En el desarrollo del ejercicio se elaborará en dos pasos:
- PASO 1: PINTADO DE DATOS DE FORMULARIO
- PASO2: RECEPCIÓN DE DATOS DE FORMULARIO
PASO 1: Pintamos el formulario de una solicitud de pedido de producto por su nombre...
Empezamos por la vista
creamos el formulario utilizando las etiquetas de struts, en una página jsp (formPedidoProductoStruts.jsp) que se enviará a un action de struts:
<%@ taglib uri="http://jakarta.apache.org/struts/tags-html"
prefix="struts-html"%>
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>JSP Page</title>
</head>
<body>
<h1>Formularios con Struts: envio de pedido de producto</h1>
<struts-html:form action="/recibeFormularioPedido">
<struts-html:text property="nombreProducto" />
<struts-html:submit value="pedir" />
</struts-html:form>
</body>
</html>
Seguimos por el formulario (objeto java) que encapsulará el formulario (página web texto html)
(Formulario/Modelo) FormularioPedido.java
Esta clase hereda de org.apache.struts.action.ActionForm y es un POJO (getter/setters) de las propiedades que encapsulará el formulario y que deberían inyectarse en las propiedades del modelo .java
package es.cea.struts1;
import org.apache.struts.action.ActionForm;
public class FormularioPedido extends ActionForm {
String nombreProducto;
public String getNombreProducto() {
return nombreProducto;
}
public void setNombreProducto(String nombreProducto) {
this.nombreProducto = nombreProducto;
}
}
Seguimos por la Accion (Controlador/Action) FormularioPedido.java
Nueva clase que extiende de Struts org.apache.struts.action.Action y que a diferencia de aquellas que no utilizan formulario, en su implementación crea un objeto java de tipo FormularioPedido y lo envian al formulario jsp/html formPedidoProductoStruts.jsp para su posterior inyección al pulsar el botón enviar.
package es.cea.struts1;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
public class FormularioPedidoAction extends Action {
Log logger = LogFactory.getLog(getClass());
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
FormularioPedido pedidoForm=(FormularioPedido) form;
pedidoForm.setNombreProducto("escribe aqui el nombre del producto a pedir");
return mapping.findForward("formularioNuevo");
}
}
Seguimos por struts-config.xml: (activación de modelo/formulario y navegación)
La activación del modelo de tipo formulario FormularioPedido
Incluimos el bean de tipo Struts.ActionForm: FormularioPedido en el fichero de configuración de struts
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.1//EN"
"http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd">
<struts-config>
<form-beans>
<form-bean name="pedidoForm" type="es.cea.struts1.FormularioPedido"></form-bean>
</form-beans>
<action-mappings>
<action path="/helloStruts" type="es.cea.struts1.HelloWorldAction">
<forward name="ok" path="/helloWorldStruts.jsp">
</forward>
</action>
</action-mappings>
</struts-config>
La navegación según el resultado de la acción
ActionForward af=mapping.findForward("formularioNuevo");
y redirigimos el resultado de la acción formularioNuevo a la vista (jsp) encargada del renderizado del modelo: formPedidoProductoStruts.jsp
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.1//EN"
"http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd">
<struts-config>
<form-beans>
<form-bean name="pedidoForm" type="es.cea.struts1.FormularioPedido"></form-bean>
</form-beans>
<action-mappings>
<action path="/helloStruts" type="es.cea.struts1.HelloWorldAction">
<forward name="ok" path="/helloWorldStruts.jsp">
</forward>
</action>
<action path="/formPedidoProducto" type="es.cea.struts1.FormularioPedidoAction" name="pedidoForm">
<forward name="formularioNuevo" path="/formPedidoProductoStruts.jsp">
</forward>
</action>
</action-mappings>
</struts-config>
PASO 2: RECEPCIÓN DE DATOS DE FORMULARIO
Comenzamos por la vista
el jsp: recepcionFormPedidoProductoStruts.jsp
se le confirma el envio de la información al usuario y se le indica el producto solicitado
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>JSP Page</title>
</head>
<body>
<h1>Solicitud de pedido recibida correctamente</h1>
<h2>Producto solicitado: ${requestScope.nombreProducto}</h2>
</body>
</html>
Seguimos por la evaluación de la vista (jsp) en función del resultado de la acción: struts-config.xml
RecepcionFormularioPedidoAction.java devuelve "pedidoRecibidoOK" y se traduce en la vista(jsp) recepcionFormPedidoProductoStruts.jsp
...
<struts-config>
....
<action-mappings>
...
<action path="/recibeFormularioPedido" type="es.cea.struts1.RecepcionFormularioPedidoAction"
name="pedidoForm">
<forward name="pedidoRecibidoOK" path="/recepcionFormPedidoProductoStruts.jsp"/>
</action>
</action-mappings>
</struts-config>
Seguimos por la Accion (Controlador/Action) que recibira el formulario RecepcionFormularioPedidoAction.java
Nueva clase que extiende de Struts org.apache.struts.action.Action, y que recibe el formulario con los valores inyectados por el usuario. En el ejemplo el controlador carga en el modelo a representar en la siguiente vista el nombre del producto solicitado en el formulario (request.setAttribute(nombreProducto)). Como resultado el controlador/accion devuelve el resultado ('pedidoRecibidoOK') en función del cual se evaluará la vista (jsp) en el faces-config.xml
package es.cea.struts1;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
public class RecepcionFormularioPedidoAction extends Action {
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
FormularioPedido pedidoForm = (FormularioPedido) form;
request.setAttribute("nombreProducto", pedidoForm.getNombreProducto());
return mapping.findForward("pedidoRecibidoOK");
}
}
No hay comentarios:
Publicar un comentario