Programación en castellano
Inicio > Tutoriales > APIS Java > Manual Básico de Struts
-Tutoriales

Manual Básico de Struts


Model

. Intro

El Model comprende todos los Objetos de Negocio donde se implementa la lógica de negocio (el "how it's done") y donde se debe soportar todos los requisitos funcionales del Sistema sin mezclarlo con partes correspondientes al workflow (el "what to do") que corresponden al Controller.

. Action Bean

Generalmente, los Action Beans siempre realizan las siguientes acciones:

  1. Obtener los valores necesarios del Action Form, JavaBean, request, session o de donde sea.
  2. Llamar a los objetos de negocio del Model.
  3. Analizar los resultados, y según los mismos retornar el ActionForward correspondiente.

Veamos entonces un ejemplo de Action Bean:

public final class LogonAction extends Action {
 public ActionForward perform(ActionMapping mapping, 
                              ActionForm form, 
                              HttpServletRequest request, 
                              HttpServletResponse response) 
         throws IOException, ServletException {

 // Obteniendo atributos

  Locale locale = getLocale(request);
  MessageResources messages = getResources();
  User user = null;

 // Validando los parámetros

  ActionErrors errors = new ActionErrors();
  String username = ((LogonForm) form).getUsername();
  String password = ((LogonForm) form).getPassword();
  try {
   DataSource dataSource = servlet.findDataSource(null);
   Connection myConnection = dataSource.getConnection();
  } catch (SQLException e) {
   errors.add(ActionErrors.GLOBAL_ERROR, new ActionError("error.database.missing"));
   saveErrors(request, errors);
   return (new ActionForward(mapping.getInput()));
  }
  UserFactory userFactory = new UserFactory(database);
  user = userFactory.getUser(username, password);
  if (user == null) {
   errors.add(ActionErrors.GLOBAL_ERROR, new ActionError("error.password.mismatch"));
   saveErrors(request, errors);
   return (new ActionForward(mapping.getInput()));
  }

  // Guardando el usuario en la sesion

  HttpSession session = request.getSession();
  session.setAttribute(Constants.USER_KEY, user);
  
  // Eliminando el form bean obsoleto

  if (mapping.getAttribute() != null) {
   if ("request".equals(mapping.getScope()))
    request.removeAttribute(mapping.getAttribute());
   else
    session.removeAttribute(mapping.getAttribute());
  }
  // Pasando el control a la siguiente página
  return (mapping.findForward("success"));
 }
}

. System State Beans

Los System State Beans son el conjunto de objetos de negocio que representan el estado actual del sistema, por ejemplo: el carrito de la compra que el usuario va modificando a lo largo de su interacción con la aplicación. Estos objetos de negocio serán típicamente JavaBeans o EJBs de los que se guardará referencia en la sesión del usuario, que serán modificados desde los Action y que serán consultados desde las JSPs.

Esta clase de objetos no debiera tener ningún conocimiento de la View.

. BusinessLogic Beans

Los objetos de negocio son los que implementan la lógica de negocio, el cómo hacer las cosas y su propia persistencia. Estos objetos de negocio no debiera tener ningún conocimiento de la View o el Controller de forma que debieran ser perfectamente reutilizables para implementar soporte a distintas interfaces y hasta para incluirse en nuevas aplicaciones.

. Accediendo a BD

Con Struts se puede definir un datasource para una aplicación desde el struts-config.xml (más información en la sección "The Action Mappings Configuration File" del "Struts User Manual"). Este datasource nos permite obtener una connection desde un Action y desde allí utilizarlo o pasarlo al Model. Muy práctico.

Este es un ejemplo de acceso a una conexión desde un Action:

public ActionForward perform(ActionMapping mapping, 
            ActionForm form, 
            HttpServletRequest request, 
            HttpServletResponse response) {

 javax.sql.DataSource dataSource;
 java.sql.Connection myConnection;
 ...
 try {
   dataSource = servlet.findDataSource(null);
   myConnection = dataSource.getConnection();
   ...
 } catch (SQLException sqle) {
   getServlet().log("Connection.process", sqle);
 } finally {
   ...
   try {
     myConnection.close();
   } catch (SQLException e) {
     getServlet().log("Connection.close", e);
   }
 }
}
 
Patrocinados
 

Copyright © 1999-2007 Programación en castellano. Todos los derechos reservados.
Formulario de Contacto - Datos legales - Publicidad

Hospedaje web y servidores dedicados linux por Ferca Network

red internet: musica mp3 | logos y melodias | hospedaje web linux | registro de dominios | servidores dedicados
más internet: comprar | recursos gratis | posicionamiento en buscadores | tienda virtual | gifs animados