Creación de un componente de Avisos II

,
Hola de nuevo, en este post continuare la creación de un componente de avisos, ahora enfocandame en la parte de Java y BD, es decir, el lado del servidor.

1. Crearemos un servlet ( también puede ser un Action, etc..) donde llamaremos a los DAO y otra lógica (tan compleja o básica como se necesite), para no extenderme en código solo pondré la parte de la función post.


/**
* Controlador de Componentes
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
 System.out.println("->> BatchAjustesAction <<-");
 String url="/blank.jsp";
 try {
  String componente = request.getParameter("component");
  System.out.println("- componente:" + componente);
  if ( componente != null) {
   if ( componente.trim().equals("mostrarAvisos")) {
   // Carga Mensajes del sistema
   url="/jsp/componentes/avisos.jsp";
   AvisoDAO avisosDAO = new AvisoDAO();
   List listAvisos = avisosDAO.getAvisos();
   request.setAttribute("listAvisos", listAvisos);
  }
 } catch( Exception e) {
  e.printStackTrace();
  url="/jsp/common/error.jsp";
 }
 this.dispatch(request, response, url);
}

protected void dispatch(HttpServletRequest request,HttpServletResponse response, String url) {
 try {
  System.out.println("-- dispatch: " + url);
  RequestDispatcher rd= request.getRequestDispatcher(url);
  rd.forward(request, response);
 } catch(Exception e){}
}



6. Las clases axiliares de AvisoDAO y AvisoVO son como siguen:


public class AvisoDAO {
  List listAvisos = null;
  Connection conn = null;
  PreparedStatement pstm = null;
  ResultSet rset = null;
  try {
   AvisoVO item = null;
   String sql = "SELECT * FROM TBL_AVISO A, TBL_AVISO_DET B
WHERE B.IDAVISO = A.IDAVISO
AND A.ESTATUS = 'A' ORDER BY A.FECHA DESC, SECUENCIA ASC
   conn = DBManager.getConnection();
   pstm = conn.prepareStatement(sql);
   pstm.clearParameters();
   rset = pstm.executeQuery();
   listAvisos = new ArrayList();
   String key = "";
   boolean primero = true;
   while( rset.next()) {
    String idAviso = rset.getString("IDAVISO").trim();
    if( !key.equals(idAviso)) {
     if( !primero) {
      listAvisos.add(item);
     }
     item = new AvisoVO();
     item.setIdAviso( idAviso);
     item.setFecha( rset.getDate("FECHA"));
     item.setDetalle( rset.getString("DETALLE"));
     primero = false;
     key = idAviso;
    } else {
     item.appendDetalle( rset.getString("DETALLE"));
    }
   }
   if( item != null) {
    listAvisos.add(item);
   }
   System.out.println("----- Total de avisos: " + listAvisos.size());
 } catch( Exception e) {
   e.printStackTrace();
 } finally {
  try{ if( rset !=null) rset.close(); }catch( Exception e) {}
  try{ if( pstm !=null) pstm.close(); }catch( Exception e) {}
  try{ if( conn !=null) conn.close(); }catch( Exception e) {}
 }
}






public class AvisoVO {

  private Date fecha;
  private String idAviso;
  private String detalle;

  public void appendDetalle(String detalle) {
   if( this.detalle == null) {
    this.detalle = detalle;
   } else {
    this.detalle += detalle;
   }
  }
  getters() ..
  setters() ..
}




7. Las tablas tienen la siguiente estructura:


CREATE TABLE TBL_AVISO (
IDAVISO CHAR(10),
FECHA DATE,
ESTATUS CHAR(1),
PRIMARY KEY(IDAVISO)
);

CREATE TABLE TBL_AVISO_DET (
IDAVISO CHAR(10),
SECUENCIA NUMBER,
DETALLE CHAR(250),
PRIMARY KEY(IDAVISO, SECUENCIA)
);



Donde TBL_AVISO tiene el encabezado del aviso, y TBL_AVISO_DET contiene el mensaje del aviso, se tiene esta estructura ya que el mensaje se encuentra en el campo de DETALLE y si este supera los 250 caracteres se tiene que crear otro registro en la tabla de AVISO_DET con un numero de secuencia mayor, un ejemplo de aviso seria:


INSERT INTO SIPAB_AVISO VALUES ('TEST',SYSDATE,'A');

INSERT INTO SIPAB_AVISO_DET VALUES('TEST',0,'Mensaje de Prueba');
INSERT INTO SIPAB_AVISO_DET VALUES('TEST',1,' continucacion del mensaje de prueba');



Integrando esta parte con el primer Post estará listo y funcional un componente para Mostrar Avisos Básico y puede ser posicionado en cualquier parte de la página.

Todos los comentarios, sugerencias y dudas son bien recibidos.

0 comentarios: