jueves, 18 de noviembre de 2010

STRUTS1 FORMULARIO

El proceso de envio de datos a través de formularios consiste en:
  1. Dos vistas (pantallas): pintado de formulario y recepción de formulario
  2. Un objeto java formulario que encapsula al formulario HTML
  3. Dos controladores que escuchan su url correspondiente
  4. 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:
  1. PASO 1: PINTADO DE DATOS DE FORMULARIO
  2. 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