Tema: ARCHIVO .do
Ver Mensaje Individual
  #8 (permalink)  
Antiguo 09/12/2004, 08:57
ndaniel8a
 
Fecha de Ingreso: diciembre-2004
Ubicación: Bogota, Colombia
Mensajes: 10
Antigüedad: 19 años, 5 meses
Puntos: 0
Hola como te va?

Bueno tu pregunta produce una respues larga, lo que tienes que saber basicamente es lo siguiente, en struts para acceder a una BD se debe configurar algo llamado datasource esto se declara en el struts-config.xml de la siguiente manera:


<data-source key="KEY_EJEMPLO" type="CLASS DEL DRIVER">
<set-property property="URL" value="STRIN DE CONEXION O URL" />
<set-property property="user" value="USERID" />
<set-property property="password" value="PASS" />
<set-property property="maxActive" value="3" />
<set-property property="maxWait" value="5000" />
<set-property property="defaultAutoCommit" value="false" />
</data-source>

Si ya tienes configurado eso entonces cuando se genere un action puede consultar la bd de datos, lo que yo hago es crear un bean con todos los campos de la tabla llamada generalmente VO, una clase para acceder a los datos (modelo del negocio donde se hacen las sentencia sql) llamada generalmente DAO, y la clase action que la desciendo de dispatchaction...es la misma que action solo que con esta puedes tener varios metodos execute desde una sola clase.

ej: del dispatch action

Esta clase es la que recibe el action desde la pagina jsp, de aca entonces lo que hago dependiendo del metodo es llamar a add si se va
a insertar, a upd si va a actualizar, a load para cargar un registro especifico, entonces explico el add que fue el unico que coloque,
entonces nos llega el ActionForm, de alli sacamos los datos que vienen de los formularios luego de eso conseguimos el datasource que
se declaro en el strut-config, hay dice ds = getActiveDataSource(request) eso es una funcion como la siguiente:

public DataSource getActiveDataSource(HttpServletRequest request) throws Exception {
DataSource ds = null;
String datasourcekey;

datasourcekey = (String) request.getSession().getAttribute("KEY_EJEMPLO");
ds = this.getDataSource(request, datasourcekey);
return ds;
}

fijate hay en el "KEY_EJEMPLO" con ese key fue que se declaro en el struts-config, luego de eso entonces llamamos a la sentencia
sql ya que tenemos el datasource y el VO....entonces mira la clase DAO y VO

import java.sql.SQLException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.sql.DataSource;

import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.DynaActionForm;

import com.union.common.ApplicationLog;
import com.union.common.GenericaDispatchAction;


public class IdiomaDispatchAction extends GenericaDispatchAction {
private static final String FWD_FORMULARIO = "formulario";
private static final String FWD_EXITOSO = "exitoso";
private static final String FWD_REINTENTAR = "error";

public ActionForward add( ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response )
throws ServletException {
DynaActionForm f;
DataSource ds;
IdiomaVO vo;
initLog( );
f = (DynaActionForm) form;
vo = new IdiomaVO( );
vo.setIdioma( (String) f.get( "idioma" ) );
vo.setNombre( (String) f.get( "nombre" ) );

try {
ds = getActiveDataSource( request );
}
catch( Exception e ) {
log.addError( e.getMessage( ) );
saveLog( request );

return mapping.findForward( IdiomaDispatchAction.FWD_REINTENTAR );
}

try {
if( !IdiomaDAO.addIdioma( vo, ds ) ) {
System.out.println( "ErrorGeneral" );
log.addError( "error.general" );
saveLog( request );

return mapping.findForward( IdiomaDispatchAction.FWD_REINTENTAR );
}
}
catch( SQLException sqlx ) {
log.addDatabaseError( sqlx );
log.addDatabaseUserError( sqlx, ds );
saveLog( request );

return mapping.findForward( IdiomaDispatchAction.FWD_REINTENTAR );
}

log.addMessage( "mensaje.registro.XXzado", "Idioma", 1 );
saveLog( request );

return mapping.findForward( IdiomaDispatchAction.FWD_EXITOSO );
}


public ActionForward upd( ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response )
throws ServletException {
}


public ActionForward load( ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response )
throws ServletException {
}


public ActionForward preload( ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response )
throws Exception, ServletException {
}
}



ej del VO:
public class IdiomaVO implements Serializable {
private String idioma;
private String nombre;

/**
* @return Returns the idioma.
*/
public String getIdioma( ) {
return idioma;
}


/**
* @param idioma The idioma to set.
*/
public void setIdioma( String idioma ) {
this.idioma = toUpperCase(idioma);
}


/**
* @return Returns the nombre.
*/
public String getNombre( ) {
return nombre;
}


/**
* @param nombre The nombre to set.
*/
public void setNombre( String nombre ) {
this.nombre = toUpperCase(nombre);
}

private String toUpperCase(String str) {
if (str != null)
return str.toUpperCase();
else
return str;
}
}

ej del dao:

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.LinkedList;

import javax.sql.DataSource;

import com.union.common.GenericoDAO;


public class IdiomaDAO {

public static boolean addIdioma( IdiomaVO vo, DataSource ds )
throws SQLException {
Connection conn = null;
StringBuffer sql;
boolean ok = false;
conn = ds.getConnection( );

sql = new StringBuffer( "INSERT INTO idioma_idi (cidi_idioma, cidi_nombre )" );
sql.append( " VALUES ( " );
sql.append( GenericoDAO.toSQL( vo.getIdioma( ), true ) + ", " );
sql.append( GenericoDAO.toSQL( vo.getNombre( ), true ) + ")" );
ok = GenericoDAO.execute( sql.toString( ), conn );

return ok;
}

}

--ACA continuamos entonces llamado a la clase addIdioma le pasamos el vo con los datos recuperados, el datasource recuperado, creamos la sentencia sql
y recuperamos una conexion como conn = ds.getConnection() y listo...ya puedes hacer lo que quieras con las bases de datos, en esa clase dao
tambien puedes declarar otros metodos como el de actualizar, el de eliminar...etc.

Aca te envio como se configura el action y el formbean de idioma por si lo necesitas.

EL FORM BEAN

<form-bean dynamic="true" name="idioma" type="org.apache.struts.action.DynaActionForm">
<form-property name="idioma" type="java.lang.String"/>
<form-property name="nombre" type="java.lang.String"/>
<form-property name="mtd" type="java.lang.String" />
</form-bean>

y el action

<action
path="/parametrohov/idioma"
name="idioma"
scope="request"
type="com.union.sara.parametrohov.IdiomaDispatchAc tion"
parameter="mtd"
validate="false">
<forward name="formulario" path="/pages/modulos/parametrohov/idiomaAdm.jsp" />
<forward name="exitoso" path="/parametrohov/listado.do?mtd=idi" />
<forward name="error" path="/pages/modulos/parametrohov/idiomaAdm.jsp" />
</action>

Hasta Pronto y espeor que le sirva de algo.

Daniel..de Colombia.