Download Librería DWR - Manual de uso

Document related concepts
no text concepts found
Transcript
Uso de la librería DWR
en aplicaciones ICM
Área de Arquitectura de Aplicaciones
AREA DE ARQUITECTURA DE APLICACIONES
MANUAL DWR
Identidad Corporativa de ICM
1 TABLA DE CONTENIDO
1
TABLA DE CONTENIDO ................................................................................................... 2
2
INTRODUCCIÓN................................................................................................................ 3
3
COMPONENTES NECESARIOS ....................................................................................... 3
3.1
3.1.1
3.1.2
3.2
3.2.1
3.3
4
Librería DWR ...........................................................................................................................3
Modificar fichero web.xml .....................................................................................................................3
Crear y configurar el fichero dwr.xml....................................................................................................3
LIBRERÍA DE SISTEMAS ........................................................................................................4
ClaseDWR ............................................................................................................................................4
CÓDIGO JAVASCRIPT ............................................................................................................5
EJEMPLO........................................................................................................................... 5
4.1
COMBO ....................................................................................................................................5
Documento: Uso de DWR en aplicaciones ICM
Versión: 1.0
Fichero: DWR.doc
Proyecto: Area de Arquitectura de Aplicaciones
Fase:
Fecha: 08/06/2007
Página 2/7
AREA DE ARQUITECTURA DE APLICACIONES
MANUAL DWR
Identidad Corporativa de ICM
2 INTRODUCCIÓN
DWR, Direct Web Remoting, es una librería de código abierto que facilita el uso de Ajax en aplicaciones web.
Proporciona un mecanismo mediante el cual se puede invocar métodos java alojados en el servidor a traves de
código javascript. También proporciona una librería de utilidades javascript para modificar la página web con
los datos obtenidos del sevidor.
DWR consta de dos partes principales:
•
•
Javascript corriendo del lado del cliente que se comunica con el servidor y actualiza dinámicamente la
página web.
Un servlet que se ejecuta en el servidor de aplicaciones y que se encarga de procesar las peticiones y
enviar las respuestas.
3 COMPONENTES NECESARIOS
3.1 Librería DWR
Hay que descargarse la librería dwr.jar e incluirla en el directorio WEB-INF/lib de la aplicación.
3.1.1 Modificar fichero web.xml
En el fichero web.xml hay que definir el servlet de dwr, para ello se tendrá que añadir las siguientes lineas:
<servlet>
<servlet-name>dwr-invoker</servlet-name>
<display-name>DWR Servlet</display-name>
<servlet-class>uk.ltd.getahead.dwr.DWRServlet </servlet-class>
<init-param>
<param-name>debug</param-name>
<param-value>true</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>dwr-invoker</servlet-name>
<url-pattern>/dwr/*</url-pattern>
</servlet-mapping>
3.1.2 Crear y configurar el fichero dwr.xml
Es necesario crear un fichero dwr.xml que se añadirá en el directorio WEB-INF junto al fichero web.xml.
Este fichero sirve para configurar dwr. La estructura de este fichero es:
<!DOCTYPE dwr PUBLIC
"-//GetAhead Limited//DTD Direct Web Remoting 1.0//EN"
Documento: Uso de DWR en aplicaciones ICM
Versión: 1.0
Fichero: DWR.doc
Proyecto: Area de Arquitectura de Aplicaciones
Fase:
Fecha: 08/06/2007
Página 3/7
AREA DE ARQUITECTURA DE APLICACIONES
MANUAL DWR
Identidad Corporativa de ICM
"http://www.getahead.ltd.uk/dwr/dwr10.dtd">
<dwr>
<!-- init is only needed if you are extending DWR -->
<init>
<creator id="..." class="..."/>
<converter id="..." class="..."/>
</init>
<!-- without allow, DWR isn't allowed to do anything -->
<allow>
<create creator="..." javascript="..."/>
<convert converter="..." match="..."/>
</allow>
<!-- you may need to tell DWR about method signatures -->
<signatures>
...
</signatures>
</dwr>
A continuación se muestra el código de un fichero dwr:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE dwr PUBLIC "-//GetAhead Limited//DTD Direct Web Remoting 1.0//EN"
"http://www.getahead.ltd.uk/dwr/dwr10.dtd">
<dwr>
<allow>
<create creator="new" javascript="ObtenerMunicipios">
<param
name="class"
value="ejemplo_dwr.acciones.ajax.ObtenerMunicipios" />
</create>
<convert converter="bean" match="ejemplo_dwr.bean.MunicipiosBean"/>
</allow>
</dwr>
En este fichero se definen las clases java que podrán ser usadas por DWR. Para más aclaraciones de cómo
configurar este fichero acceder a http://getahead.org/dwr/server/dwrxml .
3.2 LIBRERÍA DE SISTEMAS
3.2.1 ClaseDWR
Las clases que se vayan a utilizar con DWR deben heredar de ClaseDWR y se colocarán en el directorio
acciones/ajax. Además en los métodos implementados que accedan a BBDD se tendrá que usar los métodos
obtenerConexion y liberarConexion.
Documento: Uso de DWR en aplicaciones ICM
Versión: 1.0
Fichero: DWR.doc
Proyecto: Area de Arquitectura de Aplicaciones
Fase:
Fecha: 08/06/2007
Página 4/7
AREA DE ARQUITECTURA DE APLICACIONES
MANUAL DWR
Identidad Corporativa de ICM
public class BuscadorInteractivo extends ClaseDWR{
public List obtenerLista(String cadenaMun) throws DWRException {
MunicipiosDAO municipiosDAO = new MunicipiosDAO();
LinkedList listaMunicipios = null;
try{
Connection con = obtenerConexion(this);
listaMunicipios =
(LinkedList)municipiosDAO.busquedaPorNombre(con,cadenaMun);
liberarConexion(con);
}catch(DAOException daoex){
Trazas.imprimeErrorExtendido(daoex);
throw new DWRException(daoex.getMessage());
}
return listaMunicipios;
}
}
3.3 CÓDIGO JAVASCRIPT
DWR proporciona dos librerías javascript que se han de importar a la página web.
<script type="text/javascript" src="/nombreApp/dwr/engine.js"></script>
<script type="text/javascript" src="/nombreApp/dwr/util.js"></script>
Ademas existen dos funciones javascript para la gestión de errores, se deberán añadir siempre, son las
siguientes:
function init(){
DWREngine.setErrorHandler(errors);
}
function errors(message) {
alert("Errores " + message);
}
4 EJEMPLO
4.1 COMBO
Este ejemplo rellena con datos de municipios un control select a partir de la base de datos. La acción debe
retornar una lista.
Documento: Uso de DWR en aplicaciones ICM
Versión: 1.0
Fichero: DWR.doc
Proyecto: Area de Arquitectura de Aplicaciones
Fase:
Fecha: 08/06/2007
Página 5/7
AREA DE ARQUITECTURA DE APLICACIONES
MANUAL DWR
Identidad Corporativa de ICM
En la página jsp se crean dos funciones javascript.
La función lista_municipios() llama al método listaPorProvincia de la acción ObtenerMunicipios.
La función procesa_listaPorProvincia() será la encargada de gestionar los datos que devuelva el
método de la acción.
Código jsp de la página:
<script type="text/javascript"
src="/ejemplo_dwr/dwr/interface/ObtenerMunicipios.js"></script>
<script type="text/javascript" src="/ejemplo_dwr/dwr/engine.js"></script>
<script type="text/javascript" src="/ejemplo_dwr/dwr/util.js"></script>
<jsp:useBean id="lista_provincias" scope="request" class="java.util.LinkedList" />
<%@ taglib uri="/jstl-core" prefix="c" %>
<script>
<!-/* Las funciones init() y errors() gestionan los errores */
function init(){
DWREngine.setErrorHandler(errors);
}
function errors(message) {
alert("Errores "+message);
}
function listar_municipios(){
var provincia = DWRUtil.getValue("provincia");
ObtenerMunicipios.listaPorProvincia(provincia,procesa_listaPorProvincia);
}
function procesa_listaPorProvincia(listaMunicipios){
DWRUtil.removeAllOptions("municipio");
DWRUtil.addOptions("municipio",listaMunicipios,'cdmuni','dsmuni');
}
-->
</script>
<FORM name="Formulario_1" method="post" action="#" >
<b>Ejemplo de relleno de un combo.</b><br><br>
<p>Provincia:</p>
<SELECT name="provincia" onchange="listar_municipios()">
<OPTION selected></OPTION>
<c:forEach var="registro" items="${lista_provincias}">
<OPTION value="<c:out value='${registro.cdprov}' />"><c:out
value='${registro.dsprov}' /></OPTION>
Documento: Uso de DWR en aplicaciones ICM
Versión: 1.0
Fichero: DWR.doc
Proyecto: Area de Arquitectura de Aplicaciones
Fase:
Fecha: 08/06/2007
Página 6/7
AREA DE ARQUITECTURA DE APLICACIONES
MANUAL DWR
Identidad Corporativa de ICM
</c:forEach>
</SELECT>
<br>
<p>Lista de municipios de la provincia seleccionada :</p>
<SELECT id="municipio" name="municipio">
</SELECT>
</FORM>
Clase java implementada para el ejemplo:
package ejemplo_dwr.acciones.ajax;
import java.sql.Connection;
import java.util.LinkedList;
import java.util.List;
import
import
import
import
import
import
ejemplo_dwr.bean.ProvinciasBean;
ejemplo_dwr.modelo.MunicipiosDAO;
sistemas.framework.acciones.ClaseDWR;
sistemas.framework.excepciones.DWRException;
sistemas.framework.excepciones.DAOException;
sistemas.util.Trazas;
public class ObtenerMunicipios extends ClaseDWR{
public List listaPorProvincia(String CdProvincia) throws DWRException {
LinkedList listaMunicipios = new LinkedList();
ProvinciasBean provinciasBean = new ProvinciasBean();
provinciasBean.setCdprov(CdProvincia);
MunicipiosDAO municipiosDAO = new MunicipiosDAO();
Connection con = obtenerConexion(this);
try {
listaMunicipios =
(LinkedList)municipiosDAO.busqueda(con,provinciasBean);
}catch (DAOException daoex) {
Trazas.imprimeErrorExtendido(daoex);
throw new DWRException(daoex.getMessage());
}finally{
liberarConexion(con);
}
return listaMunicipios;
}
}
Documento: Uso de DWR en aplicaciones ICM
Versión: 1.0
Fichero: DWR.doc
Proyecto: Area de Arquitectura de Aplicaciones
Fase:
Fecha: 08/06/2007
Página 7/7