SlideShare una empresa de Scribd logo
1 de 30
UDA – Utilidades de desarrollo de aplicaciones by EJIE is licensed under a Creative Commons Reconocimiento-
NoComercial-CompartirIgual 3.0 Unported License.
UDA - Utilidades de Desarrollo de Aplicaciones
Componentes RUP – Combo
Fecha: 22/11/2013 Referencia:
EJIE S.A.
Mediterráneo, 14
Tel. 945 01 73 00*
Fax. 945 01 73 01
01010 Vitoria-Gasteiz
Posta-kutxatila / Apartado: 809
01080 Vitoria-Gasteiz
www.ejie.es
Componentes RUP – Combo ii/30
Control de documentación
Título de documento: Componentes RUP – Combo
Histórico de versiones
Código: Versión: Fecha: Resumen de cambios:
1.0.0 06/06/2011 Primera versión.
1.0.1 18/07/2011
Correcciones en los números de versión de ficheros,
nuevo atributo i18nId.
1.1.0 14/09/2011
Actualización de las versiones de las librerías
JavaScript subyacentes.
Añadido el apartado Integración con UDA.
1.2.0 14/12/2011
Nuevos métodos getRupValue y setRupValue para la
interacción con los demás componentes RUP.
1.2.1 22/02/2012
Nuevo método selectLabel.
Modificado el comportamiento del método select.
2.0.0 11/07/2012
Cambios de formato y correcciones ortográficas.
Añadido de algunas funciones de gestión nuevas.
2.1.0 18/09/2012
Actualización de las versiones de las librerías
JavaScript subyacentes.
Añadido el apartado de precarga de datos
Inclusión del evento onLoadSucces.
2.1.1 09/01/2013
Permitir la selección múltiple.
Modificación de estilos para colorear líneas pares o
impares configurable.
2.4.0 22/11/2013
Se distribuye la versión minimizada de los ficheros
javascript y de estilos de RUP.
Cambios producidos desde la última versión
Se distribuye la versión minimizada de los ficheros javascript y de estilos de RUP.
Componentes RUP – Combo iii/30
Control de difusión
Responsable: Ander Martínez
Aprobado por:
Firma: Fecha:
Distribución:
Referencias de archivo
Autor:
Nombre archivo:
Localización:
Componentes RUP – Combo iv/30
Contenido
Capítulo/sección Página
1. Introducción 6
2. Ejemplo 6
3. Casos de uso 6
4. Infraestructura 7
4.1. Ficheros 7
4.2. Dependencias 7
4.3. Versión minimizada 7
5. Invocación 8
6. Parámetros 8
7. Funciones 16
8. Eventos 19
9. Comunicación remota 20
9.1. Option Groups Remotos 21
10. Combos enlazados 24
10.1. Local 24
10.2. Remoto 24
11. Precarga de datos 26
11.1. Carga a partir del elemento HTML select 26
11.2. Carga a partir de un objeto JSON 27
12. Sobreescritura del theme 28
13. Integración con UDA 30
Componentes RUP – Combo v/30
Componentes RUP – Combo 6/30
1. Introducción
La descripción del Componente Combo, visto desde el punto de vista de RUP, es la siguiente:
Permite al usuario recuperar un elemento de una gran lista de elementos o de varias listas dependientes
de forma sencilla y ocupando poco espacio en la interfaz.
2. Ejemplo
Se presentan a continuación un ejemplo de este componente:
Selección simple
Selección múltiple
3. Casos de uso
Se aconseja la utilización de este componente:
• Cuando la entrada de datos dependa de una selección de información previa. El ejemplo más
común es la selección de provincia y municipio.
Componentes RUP – Combo 7/30
4. Infraestructura
A continuación se comenta la infraestructura necesaria para el correcto funcionamiento del componente.
• Únicamente se requiere la inclusión de los ficheros que implementan el componente (js y css)
comentados en los apartados Ficheros y Dependencias.
4.1. Ficheros
Ruta Javascript: rup/scripts/
Fichero de plugin: rup.combo-x.y.z.js
Ruta theme: rup/basic-theme/
Fichero CSS del theme: theme.rup.combo-x.y.z.css
4.2. Dependencias
Por la naturaleza de desarrollo de los componentes (patrones) como plugins basados en la librería
JavaScript jQuery, es necesaria la inclusión del esta. La versión elegida para el desarrollo ha sido la
versión 1.8.0.
• jQuery 1.8.0: http://jquery.com/
La gestión de la ciertas partes visuales de los componentes, se han realizado mediante el plugin jQuery
UI que se basa en jQuery y se utiliza para construir aplicaciones web altamente interactivas. Este plugin,
proporciona abstracciones de bajo nivel de interacción y animación, efectos avanzados de alto nivel,
componentes personalizables (estilos) ente otros. La versión utilizada en el desarrollo ha sido la 1.8.23.
• jQuery UI 1.8.23: http://jqueryui.com/
Los ficheros necesarios para el correcto funcionamiento del componente son:
• jquery-1.8.0.js
• jquery-ui-1.8.23.custom.js
• jquery-ui-1.8.23.custom.css
• jquery.ui.selectmenu.js
• rup.base-x.y.z.js
• rup.combo-x.y.z.js
• theme.rup.combo-x.y.z.css
4.3. Versión minimizada
A partir de la versión v2.4.0 se distribuye la versión minimizada de los componentes RUP. Estos ficheros
contienen la versión compactada y minimizada de los ficheros javascript y de estilos necesarios para el
uso de todos los compontente RUP.
Los ficheros minimizados de RUP son los siguientes:
• rup/scripts/min/rup.min-x.y.z.js
Componentes RUP – Combo 8/30
• rup/basic-theme/rup.min-x.y.z.css
Estos ficheros son los que deben utilizarse por las aplicaciones. Las versiones individuales de cada uno
de los componentes solo deberán de emplearse en tareas de desarrollo o depuración.
5. Invocación
Este componente se invocará mediante un selector que indicará todos los elementos sobre los que se va a
aplicar el componente Combo. Por ejemplo:
$("#id_input").rup_combo (properties);
Donde el parámetro “properties” es un objeto ( var properties = {}; ) o bien directamente la declaración de lo
valores directamente. Sus posibles valores se detallan en el siguiente apartado.
6. Parámetros
A continuación se muestran los posibles parámetros de configuración que recibe el componente.
• source: este parámetro determina el tipo de combo: local o remoto y define los datos que va
a tener el combo.
o remoto se define la URL a la que se solicitan los datos a cargar:
source : "combo/remote"
Los datos devueltos por el servidor deberán seguir esta estructura JSON (el
parámetro style es opcional en caso de querer mostrar una imagen):
[
{label: "Autocomplete_es", value:"Autocomplete", style:"aaa"},
{label: "Combo_es", value:"Combo ", style:"bbb"},
{label: "Dialog_es", value:"Dialog", style:"ccc"},
...
]
o local carga los datos del fichero js desplegado como contenido estático y puede ser
de dos tipos si los literales a mostrar dependen del idioma o no:
sin dependencia: se define un array en JSON con los datos:
source : ["asp", "c", "c++", "coldfusion",
"groovy", "haskell", "java", "javascript", "perl",
"php", "python", "ruby", "scala"]
con dependencia: se define un array en JSON de objetos con su valor (value),
su literal a mostrar (i18nCaption) y su imagen en caso de tenerla (style):
Componentes RUP – Combo 9/30
source : [
{i18nCaption: "asp", value:"asp_value", style:"s_asp" },
{i18nCaption: "c", value:"c_value", style:"s_c" },
{i18nCaption: "c++", value:"c++_value", style:"s_c++" },
{i18nCaption: "coldfusion", value:"coldfusion_value",
style:"s_coldfusion " },
...
]
NOTA: Las imágenes en los combos locales sin dependencia idiomática se definen mediante el parámetro
imgs (explicado más adelante).
NOTA2: Los combos dependientes o enlazados y su configuración se explican en el apartado 10.
La internacionalización se realiza mediante el fichero de recursos definido para la aplicación que se
encontrará en la parte estática bajo codAplic/resources/codAplic.i18n.json (con sus variantes según
idioma ej: codAplic/resources/codAplic.i18n_es.json). En dicho fichero se deberá declarar un objeto
JSON cuyo nombre sea el mismo que el id del elemento HTML sobre el que se aplica el
componente. Ejemplo:
"combo" : {
"asp":"asp_es",
"c":"c_es",
"c++":"c++_es",
"coldfusion":"coldfusion_es",
"groovy":"groovy_es",
"haskell":"haskell_es",
"java":"java_es",
"javascript":"javascript_es",
"perl":"perl_es",
"php":"php_es",
"python":"python_es",
"ruby":"ruby_es",
"scala":"scala_es"
}
• sourceGroup: este parámetro se utiliza en lugar del parámetro source en aquellos combos
que se quieran agrupar elementos bajo una misma denominación. Cada elemento deberá
tener un identificador único para poder distinguir el elemento seleccionado. La fuente de los
datos puede ser local o remota (en el caso de petición retoma se deberá definir el parámetro
sourceParam):
Componentes RUP – Combo 10/30
o remoto se define la URL a la que se solicitan los datos a cargar:
sourceGroup : "combo/remoteGroup"
Los datos devueltos por el servidor deberán seguir esta estructura JSON (el
parámetro style es opcional en caso de querer mostrar una imagen):
sourceGroup : [
{"Futbol" : [
{label: "Alaves", value:"alaves", style:"aaa"},
{label: "Athletic", value:"ath", style:"bbb"},
{label: "Real Sociedad", value:"real", style:"ccc"}
]},
{"Baloncesto" : [
{label: "Caja Laboral", value:"laboral", style:"ddd"},
{label: "BBB", value:"bilbao", style:"eee"},
{label: "Lagun aro", value:"lagun aro", style:"fff"}
]},
{"Formula 1" : [
{label: "Fernando Alonso", value:"falonso"},
{label: "Lewis Hamilton", value:"hamilton"},
{label: "Sebastián Vettel", value:"vettel"}
]}
]
NOTA: Los “option groups remotos” se detallan en el apartado 9.1.
o local puede ser de dos tipos si los literales a mostrar dependen del idioma o no:
sin dependencia: se define un array en JSON con los datos:
sourceGroup : [
{"Futbol" : ["Alaves", "Athletic", "Real Sociedad"]},
{"Baloncesto" : ["Caja Laboral", "BBB", "Lagun Aro"]},
Componentes RUP – Combo 11/30
{"Formula 1" : [ "Fernando Alonso", "Hamilton",
"Vettel"]}
]
con dependencia: se define un array en JSON de objetos con su valor (value) y
su literal a mostrar (i18nCaption). El literal empleado para la cabecera del grupo
también tomará su valor del fichero de recursos:
sourceGroup : [
{"futbol" : [
{i18nCaption: "alaves", value:"alaves_value"},
{i18nCaption: "ath", value:"ath_value"},
{i18nCaption: "real", value:"real_value"}
]},
{"baloncesto" : [
{i18nCaption: "laboral", value:"laboral_value"},
{i18nCaption: "bilbao", value:"bilbao_value"},
{i18nCaption: "lagun aro", value:"lagun aro_value"}
]},
{"formula1" : [
{i18nCaption: "falonso", value:"falonso_value"},
{i18nCaption: "hamilton", value:"hamilton_value"},
{i18nCaption: "vettel", value:"vettel_value"}
]}
]
• sourceParam: en el caso de un combo remoto, deben configurarse los siguientes datos:
o label: nombre de la columna de BBDD de la que se extrae la descripción (el literal a
mostrar).
o value: nombre de la columna de BBDD de la que se extrae el valor.
o style: nombre de la columna de BBDD de la que se extrae el estilo (css) a aplicar al
dato.
Por ejemplo:
sourceParam: {
label:"desc"+$.rup_utils.capitalizedLang,
value:"code",
style:"css"
}
NOTA: En caso de utilizar una disposición horizontal para el idioma (varias columnas según
idioma) se podrá hacer uso de la función $.rup_utils.capitalizaedLang().lang que devuelve el
idioma actual (es, eu, …) capitalizado para concatenarlo al nombre de la columna y obtener
así el nombre de la columna que se desea, ej.: descEs / descEu.
• selected: indica el elemento que se seleccionará por defecto al cargarse el combo. Puede
declararse tanto un valor numérico que representa la posición del elemento en el combo
(empezando en 0) o un valor alfabético que representa el valor del elemento del combo.
Ejemplo selección posición:
selected: 6
Componentes RUP – Combo 12/30
Ejemplo selección valor:
selected: “asp_value”
• blank: se utiliza para declarar un valor independiente de la lógica del negocio. Su valor por
defecto es null. En ocasiones se representa como “Seleccione un elemento”.
Ejemplo de definición de la propiedad:
blank : "0"
Esta propiedad define el valor que va a tener dicho elemento y su descripción se recuperará
de la propiedad _blank perteneciente a la estructura JSON cuyo nombre será el
identificativo del combo. Esta estructura deberá contenerse en el fichero de literales de la
aplicación.
Ejemplo de la estructura JSON:
"combo" : {
"_blank":"[Seleccione un elemento]",
… }
En caso de no definir el literal para el elemento “_blank” se tomará el valor por defecto de
RUP (rupresourcesrup.i18n_xx.json):
"rup_combo": {
"blankNotDefined": "[Falta literal]",
… }
Si se desea sobrescribir el literal vacío para todos los combos de una aplicación
(estableciendo en todos el mismo valor) se recomienda sobrescribir el valor por defecto.
Pero no modificando directamente el fichero de recursos de RUP (ya que en posibles
actualizaciones podría perderse el cambio) si no por ejemplo desde el layoutLoader de la
aplicación:
$.rup.i18n.base.rup_combo.blankNotDefined = "----";
• width: determina el tamaño del combo. Su valor por defecto es 200 para la selección
simple. En el caso de selección múltiple su declaración es obligatoria.
• style: determina el tipo de combo a utilizar (sólo selección simple). Existen dos opciones:
dropdown y popup. El combo dropdown despliega el contenedor de opciones hacia abajo a
partir de su situación en pantalla, el combo popup en cambio despliega el contenedor de
opciones en función de la opción elegida moviendo hacia arriba o hacia abajo dicho
desplegable. Su valor por defecto es dropdown.
Ejemplo de combo dropdown:
Componentes RUP – Combo 13/30
Ejemplo de combo popup:
• maxHeight: indica el tamaño máximo en altura (sólo selección simple), que puede tomar el
desplegable del menú. Su valor por defecto es null.
• menuWidth: indica el tamaño en anchura que debe tomar el desplegable del menú (sólo
selección simple). Su valor por defecto es null.
• format: define una función que formatee los datos (sólo selección simple). Por ejemplo
sacando un combo con varias líneas por elemento:
Componentes RUP – Combo 14/30
Por defecto se incluye una función que parsea el contenido de tal manera que el combo se
visualice como e muestra en la imagen. Para lanzar esta función se pasará el parámetro
“default”. Los datos necesarios para el ejemplo son los siguientes:
source: [
"John Doe - 78 West Main St Apt 3A | Bloomsburg, PA 12345 (footer
text)",
"Jane Doe - 78 West Main St Apt 3A | Bloomsburg, PA 12345 (footer
text)",
"Joseph Doe - 78 West Main St Apt 3A | Bloomsburg, PA 12345 (footer
text)",
"Mad Doe Kiiid - 78 West Main St Apt 3A | Bloomsburg, PA 12345
(footer text)"
]
Se incluye el código de la función de parseo para mostrar la manera de implementar este
tipo de funciones:
function(text){
var findreps = [
{find:/^([^-]+) - /g, rep: '<span class="ui-selectmenu-item-
header">$1</span>'},
{find:/([^|><]+) | /g, rep: '<span class="ui-selectmenu-
item-content">$1</span>'},
{find:/([^|><()]+) (()/g, rep: '<span class="ui-
selectmenu-item-content">$1</span>$2'},
{find:/([^|><()]+)$/g, rep: '<span class="ui-selectmenu-
item-content">$1</span>'},
{find:/(([^|><]+))$/g, rep: '<span class="ui-selectmenu-
item-footer">$1</span>'}
];
for(var i in findreps){
text = text.replace(findreps[i].find, findreps[i].rep);
}
Componentes RUP – Combo 15/30
return text;
};
• imgs: define las imágenes a mostrar delante de la descripción de cada elemento (solo
combos locales sin selección múltiple). Se define una estructura JSON que será un array de
elementos cuya clave será el valor que toma el elemento del combo y cuyo valor será el
estilo a aplicar a dicho elemento. Su uso principal será aquellas combos locales no
dependientes del idioma ya que en las dependientes del idioma se puede configurar
directamente en la imagen mediante el parámetro style . A continuación se muestra un
ejemplo:
imgs : [
{Borrar: "delete"},
{Filtrar: "filter"},
{Imprimir: "print"}
]
• disabled: determina si se deshabilita el combo al ser cargado inicialmente. Su valor por
defecto es false.
• showValue: determina si el combo debe mostrar el valor asociado concatenado al literal
(sólo selección simple). Su valor por defecto es false.
• token: define el separador a utilizar cuando se muestra el valor asociado al combo
concatenado al literal. Su valor por defecto es |.
• multiValueToken: define el separador a utilizar en combos enlazados locales. Su valor por
defecto es ##. Este atributo de detalle en el apartado de combos enlazados locales (10.1).
• ordered: indica si el combo debe ordenarse. Su valor por defecto es true.
• orderedByValue: indica si el la ordenación del combo debe realizarse por el valor de los
elementos en lugar de por el texto. Su valor por defecto es false.
• i18nId: indica el identificador del objeto JSON que se utilizará para recuperar los valores de
los literales a mostrar (combos locales). En caso de no definirse se utilizará por defecto el
identificador del objeto sobre el que se aplica el combo.
• multiselect: indica si el combo permite la selección múltiple. Su valor por defecto es
false.
• multiOptgroupIconText: indica si se desea que en la selección múltiple con grupos, el
nombre del grupo tenga descripción en los iconos para seleccionar/deseleccionar los
elementos del grupo. Su valor por defecto es false.
• submitAsString: indica si el envío de los elementos seleccionados en la selección múltiple
se realiza como un literal separados por coma. Su valor por defecto es false.
Componentes RUP – Combo 16/30
• submitAsJSON: indica si el envío de los elementos seleccionados en la selección múltiple
se realiza como un array JSON donde el nombre del mapa será el nombre del combo. En el
caso de que el nombre contenga notación dot se tomará el último literal. Ej: [{id:1}, {id:2}, …].
Su valor por defecto es false y tiene prioridad sobre el submitAsString (se evalúa antes).
• rowStriping: indica si se debe aplicar un estilo diferente a las filas pares e impares para
poder distinguirlas mediante un color diferente. Su valor por defecto es false.
7. Funciones
A continuación se detallan las diferentes funciones que integran el componente Combo:
• select: selecciona el elemento enviado como parámetro. En caso de ser un numérico se selecciona
por la posición (comenzando en 0) y si es un literal se selecciona por el valor. En el caso de
selección múltiple el parámetro será un array. La invocación se realizará de la siguiente manera:
$(selector).rup_combo("select", 2); //Simple
$(selector).rup_combo("select", [0,2]); //Múltiple
• selectLabel: selecciona el elemento del combo que contiene como texto el indicado. En caso de no
existir el texto a buscar el combo no sufrirá cambios En el caso de selección múltiple el parámetro
será un array. La invocación se realizará de la siguiente manera:
$(selector).rup_combo("selectLabel", "No"); //Simple
$(selector).rup_combo("select", [‘No’, ‘Sí’]); //Múltiple
• index: devuelve el índice de la opción seleccionada en el combo (empezando en 0). En el caso de
la selección múltiple se devolverá un array. La invocación se realizará de la siguiente manera:
Componentes RUP – Combo 17/30
$(selector).rup_combo("index");
• enable: habilita el combo. La invocación se realizará de la siguiente manera:
$(selector).rup_combo("enable");
• disable: deshabilita el combo. La invocación se realizará de la siguiente manera:
$(selector).rup_combo("disable");
• isDisabled: indica si el combo está habilitado o no. La invocación se realizará de la siguiente
manera:
$(selector).rup_combo("isDisabled");
• disableChild: vacía y deshabilita el combo sobre el que se aplica así como todos los combos que
depende de él. Su uso principalmente es interno para las peticiones remotas pero se puede invocar
de la siguiente manera:
$(selector).rup_combo("disableChild");
• reload: recarga el combo sobre el que se aplica. Su uso principalmente es interno para las
peticiones remotas pero se puede invocar de la siguiente manera:
$(selector).rup_combo("reload");
• order: ordena alfanumericamente y en orden ascendente el combo sobre el que se aplica. Recibe
dos parámetros: el primero indica si la búsqueda es por texto (por defecto) o si la búsqueda es por el
valor; el segundo indica el valor del texto independiente de la lógica de negocio para que se omita
en la ordenación. Se invoca por defecto al cargarse los combos a no se que se cambie el valor del
atributo ordered en la creación. A continuación se muestra un ejemplo de cómo invocar la función:
$(selector).rup_combo("order", false, -1);
• getRupValue: método utilizado para obtener el valor del componente. Este método es el utilizado
por el resto de componentes RUP para estandarizar la obtención del valor del combo.
$(selector).rup_combo("getRupValue");
• setRupValue: método utilizado para asignar el valor al componente. Este método es el utilizado por
el resto de componentes RUP para estandarizar la asignación del valor al Autocomplete.
$(selector).rup_combo("setRupValue",value);
Componentes RUP – Combo 18/30
• clear: método que limpia el valor seleccionado en el combo. En el caso de selección múltiple los
valores seleccionados.
$(selector).rup_combo("clear");
• value: método que devuelve el valor seleccionado en el combo. En caso de ser el valor vació, o sin
selección, el valor devuelto es el asociado al “blank”. En el caso de la selección múltiple se
devolverá un array.
$(selector).rup_combo("value");
• label: método que devuelve el label asociado al valor seleccionado en el combo. En el caso de la
selección múltiple se devolverá un array.
$(selector).rup_combo("label");
Componentes RUP – Combo 19/30
8. Eventos
A continuación se detallan los eventos asociados al componente:
• open: permite asociar una función que se ejecutará cuando se muestre el desplegable del combo.
Se configura de la siguiente manera:
$(selector).rup_combo({ open: function(){...} });
• change: permite asociar una función que se ejecutará cuando se cambie el elemento seleccionado
en el combo. Se configura de la siguiente manera:
$(selector).rup_combo({ change: function(){...} });
• select: permite asociar una función que se ejecutará cuando se seleccione un valor del combo. Se
configura de la siguiente manera:
$(selector).rup_combo({ select: function(){...} });
• close: permite asociar una función que se ejecutará cuando se oculte el desplegable del combo. Se
configura de la siguiente manera:
$(selector).rup_combo({ close: function(){...} });
• onLoadSucces: permite asociar una función de callBack que se ejecuta al producirse un error en la
petición AJAX de carga remota. Se configura de la siguiente manera:
$(selector).rup_combo({onLoadSucces: function(){...} });
Componentes RUP – Combo 20/30
9. Comunicación remota
El componente Combo permite recuperar los datos almacenados en base de datos. En el método del
controller que recibe la petición se invocará al servicio encargado de recuperar los datos. Como no se va a
realizar ningún filtrado por algún campo de la entidad ni se requiere de paginación, los parámetros serán
null, null:
@RequestMapping(value = "combo/remote", method=RequestMethod.GET)
public @ResponseBody List<Patrones> getRemoteCombo(){
return patronesService.findAll(null, null);
}
El método devuelve una lista de entidades en este caso List<Patrones> donde cada entidad tendrá todos y
cada uno de los atributos cargados con los valores de la Base de Datos. Al devolver la lista con la anotación
@ResponseBody, entrará en funcionamiento Jackson (parseador de JSON de Spring) para convertir la lista
JAVA en una lista JSON:
• JAVA:
patronesList :
patronesList [0] code = Autocomplete
descEs = Autocomplete_es
descEu = Autocomplete_eu
css = filter
patronesList [1] code = Combo
descEs = Combo_es
descEu = Combo_eu
css = print
…
• JSON:
[
{code="Autocomplete", descEs="Autocomplete_es",
descdescEu="Autcomplete_eu", css="filter" },
{code="Combo", descEs="Combo_es",
descEu="Combo_eu", css="print" },
…
]
Como se ha explicado en anteriormente en el atributo source en el apartado 8 (propiedades) el componente
requiere de una estructura de terminada para cargar el combo:
[
{label: "Autocomplete_es", value:"Autocomplete", style:"aaa"},
{label: "Combo_es", value:"Combo ", style:"bbb"},
{label: "Dialog_es", value:"Dialog", style:"ccc"},
...
]
Componentes RUP – Combo 21/30
La traducción entre la estructura devuelta por el controller y la que espera el componente se realiza
mediante un serializador propio de UDA. Para que este entre en funcionamiento simplemente se deberá
configurar el fichero mvc-config del WAR (/xxxWAR/WebContent/WEB-INF/spring/mvc-config.xml)
indicando que el modelo utilizado utilice el serializador de UDA:
<bean id="jacksonJsonCustomSerializerFactory"
class="com.ejie.x38.serialization.CustomSerializerFactoryRegistry">
<property name="serializers">
<map>
<entry key="com.ejie.x21a.model.Patrones" value-ref="customSerializer" />
...
</map>
</property>
</bean>
NOTA: Al generar el código con el plugin de UDA, se añade este serializador para todos los objetos del
modelo creados.
9.1. Option Groups Remotos
El uso de “option groups remotos” requiere de un pequeño esfuerzo por parte del desarrollador ya que se
deben recuperar los diferentes grupos a incluir en el combo invocando a sus respectivos servicios y
agruparlos en la estructura que espera el componente Combo. Ejemplo:
[
{"Futbol" : [
{label: "Alaves", value:"alaves", style:"aaa"},
{label: "Athletic", value:"ath", style:"bbb"},
{label: "Real Sociedad", value:"real", style:"ccc"}
]},
{"Baloncesto" : [
{label: "Caja Laboral", value:"laboral", style:"ddd"},
{label: "BBB", value:"bilbao", style:"eee"},
{label: "Lagun aro", value:"lagun aro", style:"fff"}
]},
{"Formula 1" : [
{label: "Fernando Alonso", value:"falonso"},
{label: "Lewis Hamilton", value:"hamilton"},
{label: "Sebastián Vettel", value:"vettel"}
]}
]
El método encargado de recuperar los datos devolverá una lista que contiene un mapa por cada uno de los
grupos. Dicho mapa, tendrá como clave el literal a mostrar en la cabecera del grupo y como valor una lista
de entidades. La lista de entidades se traducirá a la estructura que espera el componente mediante el
serializador de UDA explicado en el apartado anterior.
A continuación se muestra un ejemplo de cómo debería ser el controller encargado de devolver un “option
group remoto” en el que se cargarán las entidades de Provincia, Comarca, Localidad y Patrones:
@RequestMapping(value = "combo/remoteGroup", method=RequestMethod.GET)
Componentes RUP – Combo 22/30
public @ResponseBody List<HashMap<String, List<?>>>
getRemoteComboGrupos(){
//Idioma
Locale locale = LocaleContextHolder.getLocale();
//Retorno del método
List<HashMap<String, List<?>>> retorno = new
ArrayList<HashMap<String, List<?>>>();
//Nombres de los grupos según idioma
String provincia = null, comarca = null,
localidad = null, patrones = null;
if (com.ejie.x38.util.Constants.EUSKARA.equals(
locale.getLanguage()))
{
provincia = "Provincia_eu";
comarca = "Comarca_eu";
localidad = "Localidad_eu";
patrones = "Patrones_eu";
} else {
provincia = "Provincia";
comarca = "Comarca";
localidad = "Localidad";
patrones = "Patrones";
}
//Provincia
HashMap<String, List<?>> group = new HashMap<String, List<?>>();
group.put(provincia, provinciaService.findAll(null, null));
retorno.add(group);
//Comarca
group = new HashMap<String, List<?>>();
group.put(comarca, comarcaService.findAll(null, null));
retorno.add(group);
//Localidad
group = new HashMap<String, List<?>>();
group.put(localidad, localidadService.findAll(null, null));
retorno.add(group);
//Patrones
group = new HashMap<String, List<?>>();
group.put(patrones, patronesService.findAll(null, null));
retorno.add(group);
return retorno;
}
Componentes RUP – Combo 23/30
Un ejemplo de la respuesta devuelta por este método del controlador sería la siguiente:
[
{"Provincia_eu":[
{"style":"","value":"1","label":"Araba"},
{"style":"","value":"2","label":"Bizkaia"},
{"style":"","value":"3","label":"Gipuzkoa"}
]},
{"Comarca_eu":[
{"style":"","value":"3","label":"A-Zona3"},
{"style":"","value":"2","label":"A-Zona2"},
{"style":"","value":"1","label":"A-Zona1"},
{"style":"","value":"9","label":"Ezkerraldea"},
{"style":"","value":"8","label":"Eskumaldea"},
{"style":"","value":"7","label":"Bilbo Haundia"},
{"style":"","value":"6","label":"G-Zona3"},
{"style":"","value":"5","label":"G-Zona2"},
{"style":"","value":"4","label":"G-Zona1"}
]},
{"Localidad_eu":[
{"style":"","value":"3","label":"Galdakao"},
{"style":"","value":"2","label":"Basauri"},
{"style":"","value":"1","label":"Bilbo"},
{"style":"","value":"6","label":"Getxo"},
{"style":"","value":"5","label":"Areeta"},
{"style":"","value":"4","label":"Leioa"},
{"style":"","value":"9","label":"Barakaldo"},
{"style":"","value":"8","label":"Portugalete"},
{"style":"","value":"7","label":"Sestao"}]},
{"Patrones_eu":[
{"style":"filter","value":"Autocomplete","label":"Autocomplete_eu"},
{"style":"print","value":"Combo","label":"Combo_eu"},
{"style":"delete","value":"Dialog","label":"Dialog_eu"},
{"style":"filter","value":"Feedback","label":"Feedback_eu"},
{"style":"print","value":"Grid","label":"Grid_eu"},
{"style":"delete","value":"Maint","label":"Maint_eu"},
{"style":"filter","value":"Menu","label":"Menu_eu"},
{"style":"print","value":"Message","label":"Message_eu"},
{"style":"delete","value":"Tabs","label":"Tabs_eu"},
{"style":"filter","value":"Toolbar","label":"Toolbar_eu"},
{"style":"print","value":"Tooltip","label":"Tooltip_eu"}
]}
]
Componentes RUP – Combo 24/30
10. Combos enlazados
Mediante el uso del componente Combo, se pueden encadenar dos o más combos de tal manera que los
valores que se cargarán en uno dependan directamente del valor seleccionado en el otro. Es decir, crear
combos enlazados (también conocidos como combos dependientes).
Estos combos enlazados, pueden ser tanto locales o remotos. Para indicar que un combo depende
directamente del valor de otro se utilizará el atributo parent, que será un array con los identificador(es) del
padre(s). Veamos un ejemplo:
parent: [ "departamento", "provincia" ],
Las dependencias entre los combos pueden encadenarse de tal manera que se tenga un combo que
depende de otro combo que a su vez depende de otro combo y así sucesivamente (incluso se pueden
combinar combos locales con remotos indistintamente). Además es posible que un combo dependa a su vez
de dos combos o más y no se cargará ni se activará hasta que todos sus padres hayan tomado un valor
determinado.
Al ser combos enlazados, si un combo elimina su selección (elige la opción por defecto “Seleccione un
elemento” o elige una opción de cuyo valor no dependa ningún dato) todos sus combos hijos se vaciarán y
se deshabilitarán. Además si un combo se deshabilita (o se inicializa deshabilitado), todos sus hijos se
cargarán pero se mostrarán deshabilitados.
A continuación veremos como se configuran/utilizan los combos enlazados locales y los remotos:
10.1. Local
Cuando se desea utilizar el componente Combo enlazando datos locales se deben realizar una serie de
configuraciones que se detallan a continuación:
1. La propiedad source del combo hijo, debe tener la siguiente estructura:
source: {"v1":[xxx], "v2":[yyy], "v3":[zzz] }
v1, v2, v3 : posible valor seleccionable en el combo padre
[xxx], [yyy], [zzz] : estructura que posee un combo no dependiente (ver atributo o).
2. El combo hijo debe indicar en su configuración que depende del combo padre mediante la propiedad
parent:
parent: [ "comboPadre" ]
10.2. Remoto
Cuando se desea utilizar el componente Combo enlazando datos remotos, se deben realizar una serie de
configuraciones que se detallan a continuación:
1. El combo padre debe incluir en su código HTML el atributo name que define el nombre del
parámetro que se va a enviar en la petición de carga del combo dependiente.
Componentes RUP – Combo 25/30
2. El combo hijo debe indicar en su configuración que depende del combo padre mediante la propiedad
parent.
3. El método del controller que recibe la petición de carga del hijo, contendrá en su signatura el atributo
con el valor seleccionado en el combo padre y se utilizará como filtro en la búsqueda de datos.
4. Configurar el serializador de UDA.
Código HTML:
• El combo padre debe definir el nombre del parámetro en la petición de carga del combo hijo:
<select id="comboPadreRemoto" name="provincia" class="rup-combo"></select>
• El combo hijo:
<select id="comboHijoRemoto" class="rup-combo"></select>
Configuración js:
• El combo padre:
$('#comboPadreRemoto').rup_combo({
source : "comboEnlazado/remoteEnlazadoProvincia",
...
});
• El combo hijo debe indicar cual/cuales son sus padre/s:
$('#comboHijoRemoto').rup_combo({
parent: [ "comboPadreRemoto" ],
source : "comboEnlazado/remoteEnlazadoComarca",
...
})
Controller:
• El método para la petición del combo padre:
@RequestMapping(value = "comboEnlazado/remoteEnlazadoProvincia",
method=RequestMethod.GET)
public @ResponseBody List<Provincia> getEnlazadoProvincia() {
return provinciaService.findAll(null, null);
}
• El método para la petición del combo hijo debe declarar el parámetro donde se recibe el elemento
seleccionado en el padre:
@RequestMapping(value = "comboEnlazado/remoteEnlazadoComarca",
method=RequestMethod.GET)
public @ResponseBody List<Comarca> getEnlazadoComarca(
@RequestParam(value = "provincia", required = false)
BigDecimal provincia_code) {
Componentes RUP – Combo 26/30
//Convertir parámetros en entidad para búsqueda
Provincia provincia = new Provincia();
provincia.setCode(provincia_code);
Comarca comarca = new Comarca();
comarca.setProvincia(provincia);
return comarcaService.findAll(comarca, null);
}
Serializador:
Se indica que las entidades utilizadas se serialicen en el retorno del controller a la JSP:
<bean id="jacksonJsonCustomSerializerFactory"
class="com.ejie.x38.serialization.CustomSerializerFactoryRegistry">
<property name="serializers">
<map>
<entry key="com.ejie.x21a.model.Provincia" value-ref="customSerializer" />
<entry key="com.ejie.x21a.model.Comarca" value-ref="customSerializer" />
...
</map>
</property>
</bean>
11. Precarga de datos
La recuperación los datos proporcionados por el servidor de aplicaciones, se realiza mediante una petición
AJAX. Con el objeto de minimizar el número de peticiones realizadas por el componente combo, se posibilita
el realizar una precarga de los datos que va a presentar el combo sin necesidad de realizar la primera
petición AJAX.
Se proporcionan dos mecanismos para permitir realizar la carga inicial de los datos del combo:
11.1. Carga a partir del elemento HTML select
En este caso el componente combo toma los valores existentes en los <option> del elemento select como
valores a precargar. En el caso de que el componente deba de actualizar los datos en base a una acción del
usuario, se realizará mediante una petición AJAX.
A continuación se muestra un ejemplo de la implementación que se debería de realizar para que una
invocación al componente combo utilice los datos existentes en un combo HTML para inicializarse.
Suponemos que se desea cargar en un componente RUP combo, los datos de provincias. En el controller
que realizará la navegación a la entrada del tiles correspondiente se realiza lo siguiente:
@RequestMapping(value = "maint", method = RequestMethod.GET)
public String getMaint(Model model) {
List<Provincia> listaProvincias = provinciaService.findAll(null, null);
Componentes RUP – Combo 27/30
model.addAttribute("provincias",listaProvincias);
return "maint";
}
La ejecución de este método del controller añadirá al atributo provincia del model la lista de provincias
obtenidas a partir de la consulta a base de datos. Esto nos permitirá realizar la carga de datos del combo en
la jsp.
El siguiente paso es implementar en la jsp el combo HTML en el que se van a cargar los datos. Estos datos
serán los utilizados para inicializar el componente RUP combo.
<form:select path="provincia.id" class="formulario_linea_input" id="provincia" >
<form:options items="${provincias}" itemLabel="dsO" itemValue="id"/>
</form:select>
Por último se deberá de realizar la invocación del componente RUP combo en el fichero js correspondiente a
la página.
jQuery("#provincia").rup_combo({
source : "../provincia",
sourceParam : {label:"dsO", value:"id"},
width : 400,
blank : "",
loadFromSelect:true
});
La invocación del componente se realizará de modo normal, indicando mediante el parámetro source una
URL mediante la cual se podrá realizar una recarga de los datos. Entre los parámetros de configuración se
debe de indicar mediante loadFromSelect:true que se utilice el contenido del combo HTML para la
inicialización del componente.
11.2. Carga a partir de un objeto JSON
De manera alternativa se puede proporcionar al componente de los datos con los que debe de inicializarse
mediante un objeto JSON. Este objeto puede ser inicializado directamente o generado dinámicamente tanto
en cliente como en el servidor de aplicaciones. El objeto json debe consistir en un array
Componentes RUP – Combo 28/30
12. Sobreescritura del theme
El componente combo se presenta con una apariencia visual definida en el fichero de estilos
theme.rup.combo-x.y.z.css.
Si se quiere modificar la apariencia del componente, se recomienda redefinir el/los estilos necesarios en un
fichero de estilos propio de la aplicación situado dentro del proyecto de estáticos
(codAppStatics/WebContent/codApp/styles).
Los estilos del componente se basan en los estilos básicos de los widgets de jQuery UI, con lo que los
cambios que se realicen sobre su fichero de estilos manualmente o mediante el uso de la herramienta
Theme Roller podrán tener repercusión sobre todos los componentes que compartan esos mismos estilos
(pudiendo ser el nivel de repercusión general o ajustado a un subconjunto de componentes).
Ejemplo base de la estructura generada por el componente para selección simple:
<a aria-owns=" id-menu" aria-haspopup="true" tabindex="0" href="#" role="button"
id=" id-button" class="ui-selectmenu ui-widget ui-state-default ui-selectmenu-
dropdown ui-corner-all" style="width: 300px;"
aria-disabled="false">
<span class="ui-selectmenu-status">item1</span>
<span class="ui-selectmenu-icon ui-icon ui-icon-triangle-1-s"></span>
</a>
<!-- at end of body-->
<ul id="speedA_menu_318" role="menu" aria-labelledby="speedA_button_318"
class="ui-selectmenu-menu ui-widget ui-widget-content ui-corner-all ui-
selectmenu-menu-popup ui-selectmenu-open" style="width: 147px; left: 184.017px;
top: 136.95px;">
<li class="whoo ui-corner-top ui-selectmenu-item-selected ui-state-active">
<a aria-selected="true" role="option" tabindex="-1" href="#">item1</a>
</li>
<li>
<a aria-selected="false" role="option" tabindex="-1" href="#">item2</a>
</li>
<li>
<a aria-selected="false" role="option" tabindex="-1" href="#">item3</a>
</li>
</ul>
Ejemplo base de la estructura generada por el componente para selección simple:
<button type="button"
class="ui-multiselect ui-widget ui-state-default ui-corner-all ui-
state-active"
aria-haspopup="true" style="width: 406px;"
aria-disabled="false">
<span class="ui-icon ui-icon-triangle-1-s"></span>
<span>2 seleccionado(s)</span>
Componentes RUP – Combo 29/30
</button>
<!-- at end of body-->
<div id="rup-multiCombo_multicombo"
class="ui-multiselect-menu ui-widget ui-widget-content ui-corner-all"
style="width: 398px; top: 291.9px; left: 63.15px; display: block;">
<div class="ui-widget-header ui-corner-all ui-multiselect-header
ui-helper-clearfix">
<ul class="ui-helper-reset">
<li>
<a href="#" class="ui-multiselect-all"
oldtitle="Seleccionar todos los elementos" aria-
describedby="ui-tooltip-4">
<span class="ui-icon ui-icon-check"></span>
<span>Seleccionar todo</span>
</a>
</li>
<li>
<a href="#" class="ui-multiselect-none"
oldtitle="Deseleccionar todos los elementos" aria-
describedby="ui-tooltip-5">
<span class="ui-icon ui-icon-closethick"></span>
<span>Deseleccionar todo</span>
</a>
</li>
<li class="ui-multiselect-close">
<a class="ui-multiselect-close" href="#">
<span class="ui-icon ui-icon-circle-close"></span>
</a>
</li>
</ul>
</div>
<ul class="ui-multiselect-checkboxes ui-helper-reset"
style="height: 175px;">
<li class=" ">
<label class="ui-corner-all" title=""
for="ui-multiselect-multicombo-option-0">
<input type="checkbox" checked="checked" title="ruby"
value="ruby_value" name="multiselect_multicombo"
id="ui-multiselect-multicombo-option-0">
<span>ruby</span>
</label>
</li>
...
</ul>
</div>
Estilos para colorear elementos pares e impares:
.rup-combo_odd Elementos impares
.rup-combo_even Elementos pares
.rup-combo_groupOdd Cabecera de grupo impar
.rup-combo_groupEven Cabecera de grupo par
Componentes RUP – Combo 30/30
13. Integración con UDA
En el caso de que el componente combo utilice datos obtenidos de una fuente remota, la comunicación con
el servidor de aplicaciones se realizaría del siguiente modo:
El componente Combo necesita que los datos remotos que le son servidos sigan la siguiente estructura:
[
{"style":"print","value":"1","label":"Alava"},
{"style":"print","value":"2","label":"Vizcaya"},
{"style":"print","value":"3","label":"Gipuzcoa"}]
...
]
Para este fin, el componente envía en la petición una cabecera de RUP con la información necesaria para
realizar la serialización.
{"label":"descEs","value":"code","style":"css"}
Para realizar la serialización de los datos enviados como respuesta desde el servidor, se deberá de
configurar el serializador de UDA para que genere la estructura JSON correcta para que el componente
presente los datos.
<bean id="jacksonJsonCustomSerializerFactory"
class="com.ejie.x38.serialization.CustomSerializerFactoryRegistry">
<property name="serializers">
<map>
<entry key="com.ejie.x21a.model.Provincia" value-ref="customSerializer" />
</map>
</property>
</bean>
En el serializador deberá de declararse el model correspondiente a los datos que se envían desde el
servidor.

Más contenido relacionado

La actualidad más candente

UDA-Componentes RUP. Formulario
UDA-Componentes RUP. FormularioUDA-Componentes RUP. Formulario
UDA-Componentes RUP. FormularioAnder Martinez
 
UDA-Componentes RUP. Feedback
UDA-Componentes RUP. FeedbackUDA-Componentes RUP. Feedback
UDA-Componentes RUP. FeedbackAnder Martinez
 
UDA-Componentes RUP. Pestañas
UDA-Componentes RUP. PestañasUDA-Componentes RUP. Pestañas
UDA-Componentes RUP. PestañasAnder Martinez
 
UDA-Componentes RUP. Tabla.v2.4.6
UDA-Componentes RUP. Tabla.v2.4.6UDA-Componentes RUP. Tabla.v2.4.6
UDA-Componentes RUP. Tabla.v2.4.6Ander Martinez
 
UDA-Componentes RUP. Reporting
UDA-Componentes RUP. ReportingUDA-Componentes RUP. Reporting
UDA-Componentes RUP. ReportingAnder Martinez
 
UDA-Componentes RUP. Mantenimiento (v2.1.1 deprecado)
UDA-Componentes RUP. Mantenimiento  (v2.1.1 deprecado)UDA-Componentes RUP. Mantenimiento  (v2.1.1 deprecado)
UDA-Componentes RUP. Mantenimiento (v2.1.1 deprecado)Ander Martinez
 
UDA-Componentes RUP. Diálogo (v2.1.0 deprecado)
UDA-Componentes RUP. Diálogo  (v2.1.0 deprecado)UDA-Componentes RUP. Diálogo  (v2.1.0 deprecado)
UDA-Componentes RUP. Diálogo (v2.1.0 deprecado)Ander Martinez
 
UDA-Guia de desarrollo
UDA-Guia de desarrolloUDA-Guia de desarrollo
UDA-Guia de desarrolloAnder Martinez
 
UDA-Componentes RUP. Fecha
UDA-Componentes RUP. FechaUDA-Componentes RUP. Fecha
UDA-Componentes RUP. FechaAnder Martinez
 
UDA-Plugin UDA. Guia de desarrollo
UDA-Plugin UDA. Guia de desarrolloUDA-Plugin UDA. Guia de desarrollo
UDA-Plugin UDA. Guia de desarrolloAnder Martinez
 
UDA-Anexo configuración y uso de jackson
UDA-Anexo configuración y uso de jacksonUDA-Anexo configuración y uso de jackson
UDA-Anexo configuración y uso de jacksonAnder Martinez
 
UDA-Desarrollo RUP. Consejos y buenas prácticas
UDA-Desarrollo RUP. Consejos y buenas prácticasUDA-Desarrollo RUP. Consejos y buenas prácticas
UDA-Desarrollo RUP. Consejos y buenas prácticasAnder Martinez
 
UDA-Componentes RUP. Upload
UDA-Componentes RUP. UploadUDA-Componentes RUP. Upload
UDA-Componentes RUP. UploadAnder Martinez
 
UDA-Guia desarrollo web services
UDA-Guia desarrollo web servicesUDA-Guia desarrollo web services
UDA-Guia desarrollo web servicesAnder Martinez
 
The New JavaScript: ES6
The New JavaScript: ES6The New JavaScript: ES6
The New JavaScript: ES6Rob Eisenberg
 
How to Convert a Component Design into an MUI React Code
How to Convert a Component Design into an MUI React CodeHow to Convert a Component Design into an MUI React Code
How to Convert a Component Design into an MUI React CodeWrapPixel
 
Jquery ppt
Jquery pptJquery ppt
Jquery ppt044249
 
React JS - A quick introduction tutorial
React JS - A quick introduction tutorialReact JS - A quick introduction tutorial
React JS - A quick introduction tutorialMohammed Fazuluddin
 

La actualidad más candente (20)

UDA-Componentes RUP. Formulario
UDA-Componentes RUP. FormularioUDA-Componentes RUP. Formulario
UDA-Componentes RUP. Formulario
 
UDA-Componentes RUP. Feedback
UDA-Componentes RUP. FeedbackUDA-Componentes RUP. Feedback
UDA-Componentes RUP. Feedback
 
UDA-Componentes RUP. Pestañas
UDA-Componentes RUP. PestañasUDA-Componentes RUP. Pestañas
UDA-Componentes RUP. Pestañas
 
UDA-Componentes RUP. Tabla.v2.4.6
UDA-Componentes RUP. Tabla.v2.4.6UDA-Componentes RUP. Tabla.v2.4.6
UDA-Componentes RUP. Tabla.v2.4.6
 
UDA-Componentes RUP. Reporting
UDA-Componentes RUP. ReportingUDA-Componentes RUP. Reporting
UDA-Componentes RUP. Reporting
 
UDA-Componentes RUP. Mantenimiento (v2.1.1 deprecado)
UDA-Componentes RUP. Mantenimiento  (v2.1.1 deprecado)UDA-Componentes RUP. Mantenimiento  (v2.1.1 deprecado)
UDA-Componentes RUP. Mantenimiento (v2.1.1 deprecado)
 
UDA-Componentes RUP. Diálogo (v2.1.0 deprecado)
UDA-Componentes RUP. Diálogo  (v2.1.0 deprecado)UDA-Componentes RUP. Diálogo  (v2.1.0 deprecado)
UDA-Componentes RUP. Diálogo (v2.1.0 deprecado)
 
UDA-Guia de desarrollo
UDA-Guia de desarrolloUDA-Guia de desarrollo
UDA-Guia de desarrollo
 
UDA-Componentes RUP. Fecha
UDA-Componentes RUP. FechaUDA-Componentes RUP. Fecha
UDA-Componentes RUP. Fecha
 
UDA-Plugin UDA. Guia de desarrollo
UDA-Plugin UDA. Guia de desarrolloUDA-Plugin UDA. Guia de desarrollo
UDA-Plugin UDA. Guia de desarrollo
 
UDA-Anexo configuración y uso de jackson
UDA-Anexo configuración y uso de jacksonUDA-Anexo configuración y uso de jackson
UDA-Anexo configuración y uso de jackson
 
UDA-Desarrollo RUP. Consejos y buenas prácticas
UDA-Desarrollo RUP. Consejos y buenas prácticasUDA-Desarrollo RUP. Consejos y buenas prácticas
UDA-Desarrollo RUP. Consejos y buenas prácticas
 
UDA-Componentes RUP. Upload
UDA-Componentes RUP. UploadUDA-Componentes RUP. Upload
UDA-Componentes RUP. Upload
 
Blazor and more.pptx
Blazor and more.pptxBlazor and more.pptx
Blazor and more.pptx
 
UDA-Guia desarrollo web services
UDA-Guia desarrollo web servicesUDA-Guia desarrollo web services
UDA-Guia desarrollo web services
 
The New JavaScript: ES6
The New JavaScript: ES6The New JavaScript: ES6
The New JavaScript: ES6
 
How to Convert a Component Design into an MUI React Code
How to Convert a Component Design into an MUI React CodeHow to Convert a Component Design into an MUI React Code
How to Convert a Component Design into an MUI React Code
 
Jquery ppt
Jquery pptJquery ppt
Jquery ppt
 
Angular Data Binding
Angular Data BindingAngular Data Binding
Angular Data Binding
 
React JS - A quick introduction tutorial
React JS - A quick introduction tutorialReact JS - A quick introduction tutorial
React JS - A quick introduction tutorial
 

Similar a UDA-Componentes RUP. Combo (v2.1.1 deprecado)

UDA-Componentes RUP. Migas
UDA-Componentes RUP. MigasUDA-Componentes RUP. Migas
UDA-Componentes RUP. MigasAnder Martinez
 
UDA-Componentes RUP. Tabla 2.4.1 (deprecado)
UDA-Componentes RUP. Tabla 2.4.1 (deprecado)UDA-Componentes RUP. Tabla 2.4.1 (deprecado)
UDA-Componentes RUP. Tabla 2.4.1 (deprecado)Ander Martinez
 
UDA-Componentes RUP. Árbol
UDA-Componentes RUP. ÁrbolUDA-Componentes RUP. Árbol
UDA-Componentes RUP. ÁrbolAnder Martinez
 
UDA-Componentes RUP. Autocomplete (v2.1.0 deprecado)
UDA-Componentes RUP. Autocomplete  (v2.1.0 deprecado)UDA-Componentes RUP. Autocomplete  (v2.1.0 deprecado)
UDA-Componentes RUP. Autocomplete (v2.1.0 deprecado)Ander Martinez
 
UDA-Componentes RUP. Menú contextual
UDA-Componentes RUP. Menú contextualUDA-Componentes RUP. Menú contextual
UDA-Componentes RUP. Menú contextualAnder Martinez
 
UDA-Componentes RUP. Menú
UDA-Componentes RUP. MenúUDA-Componentes RUP. Menú
UDA-Componentes RUP. MenúAnder Martinez
 
UDA-Componentes RUP dialogo.v2.4.0
UDA-Componentes RUP dialogo.v2.4.0UDA-Componentes RUP dialogo.v2.4.0
UDA-Componentes RUP dialogo.v2.4.0Ander Martinez
 
UDA-Componentes RUP. Formulario (v2.1.1 deprecado)
UDA-Componentes RUP. Formulario  (v2.1.1 deprecado)UDA-Componentes RUP. Formulario  (v2.1.1 deprecado)
UDA-Componentes RUP. Formulario (v2.1.1 deprecado)Ander Martinez
 
UDA-Componentes RUP. Wizard
UDA-Componentes RUP. WizardUDA-Componentes RUP. Wizard
UDA-Componentes RUP. WizardAnder Martinez
 
UDA-Componentes RUP. Feedback (v2.1.0 deprecado)
UDA-Componentes RUP. Feedback (v2.1.0 deprecado)UDA-Componentes RUP. Feedback (v2.1.0 deprecado)
UDA-Componentes RUP. Feedback (v2.1.0 deprecado)Ander Martinez
 
UDA - Anexo generación de informes
UDA - Anexo generación de informesUDA - Anexo generación de informes
UDA - Anexo generación de informesAnder Martinez
 
UDA-Componentes RUP. Tooltip
UDA-Componentes RUP. TooltipUDA-Componentes RUP. Tooltip
UDA-Componentes RUP. TooltipAnder Martinez
 
Introducción a Android y conexión con SharePoint
Introducción a Android y conexión con SharePointIntroducción a Android y conexión con SharePoint
Introducción a Android y conexión con SharePointAlbert Lozano Ciller
 
UDA-Componentes RUP. Reporting
UDA-Componentes RUP. ReportingUDA-Componentes RUP. Reporting
UDA-Componentes RUP. ReportingAnder Martinez
 
UDA-Componentes RUP. Botonera (v2.1.0 deprecado)
UDA-Componentes RUP. Botonera  (v2.1.0 deprecado)UDA-Componentes RUP. Botonera  (v2.1.0 deprecado)
UDA-Componentes RUP. Botonera (v2.1.0 deprecado)Ander Martinez
 
UDA-Componentes RUP. Idioma
UDA-Componentes RUP. IdiomaUDA-Componentes RUP. Idioma
UDA-Componentes RUP. IdiomaAnder Martinez
 
Django - Plataforma de sitios web
Django - Plataforma de sitios webDjango - Plataforma de sitios web
Django - Plataforma de sitios webjcarazo
 
UDA-Componentes RUP. Jerarquía (v2.1.1 deprecado)
UDA-Componentes RUP. Jerarquía  (v2.1.1 deprecado)UDA-Componentes RUP. Jerarquía  (v2.1.1 deprecado)
UDA-Componentes RUP. Jerarquía (v2.1.1 deprecado)Ander Martinez
 

Similar a UDA-Componentes RUP. Combo (v2.1.1 deprecado) (20)

UDA-Componentes RUP. Migas
UDA-Componentes RUP. MigasUDA-Componentes RUP. Migas
UDA-Componentes RUP. Migas
 
UDA-Componentes RUP. Tabla 2.4.1 (deprecado)
UDA-Componentes RUP. Tabla 2.4.1 (deprecado)UDA-Componentes RUP. Tabla 2.4.1 (deprecado)
UDA-Componentes RUP. Tabla 2.4.1 (deprecado)
 
UDA-Componentes RUP. Árbol
UDA-Componentes RUP. ÁrbolUDA-Componentes RUP. Árbol
UDA-Componentes RUP. Árbol
 
UDA-Componentes RUP. Autocomplete (v2.1.0 deprecado)
UDA-Componentes RUP. Autocomplete  (v2.1.0 deprecado)UDA-Componentes RUP. Autocomplete  (v2.1.0 deprecado)
UDA-Componentes RUP. Autocomplete (v2.1.0 deprecado)
 
UDA-Componentes RUP. Menú contextual
UDA-Componentes RUP. Menú contextualUDA-Componentes RUP. Menú contextual
UDA-Componentes RUP. Menú contextual
 
UDA-Componentes RUP. Menú
UDA-Componentes RUP. MenúUDA-Componentes RUP. Menú
UDA-Componentes RUP. Menú
 
UDA-Componentes RUP dialogo.v2.4.0
UDA-Componentes RUP dialogo.v2.4.0UDA-Componentes RUP dialogo.v2.4.0
UDA-Componentes RUP dialogo.v2.4.0
 
UDA-Componentes RUP. Formulario (v2.1.1 deprecado)
UDA-Componentes RUP. Formulario  (v2.1.1 deprecado)UDA-Componentes RUP. Formulario  (v2.1.1 deprecado)
UDA-Componentes RUP. Formulario (v2.1.1 deprecado)
 
UDA-Componentes RUP. Wizard
UDA-Componentes RUP. WizardUDA-Componentes RUP. Wizard
UDA-Componentes RUP. Wizard
 
UDA-Componentes RUP. Feedback (v2.1.0 deprecado)
UDA-Componentes RUP. Feedback (v2.1.0 deprecado)UDA-Componentes RUP. Feedback (v2.1.0 deprecado)
UDA-Componentes RUP. Feedback (v2.1.0 deprecado)
 
UDA - Anexo generación de informes
UDA - Anexo generación de informesUDA - Anexo generación de informes
UDA - Anexo generación de informes
 
UDA-Componentes RUP. Tooltip
UDA-Componentes RUP. TooltipUDA-Componentes RUP. Tooltip
UDA-Componentes RUP. Tooltip
 
Introducción a Android y conexión con SharePoint
Introducción a Android y conexión con SharePointIntroducción a Android y conexión con SharePoint
Introducción a Android y conexión con SharePoint
 
UDA-Componentes RUP. Reporting
UDA-Componentes RUP. ReportingUDA-Componentes RUP. Reporting
UDA-Componentes RUP. Reporting
 
UDA-Migracion a v2
UDA-Migracion a v2UDA-Migracion a v2
UDA-Migracion a v2
 
UDA-Componentes RUP. Botonera (v2.1.0 deprecado)
UDA-Componentes RUP. Botonera  (v2.1.0 deprecado)UDA-Componentes RUP. Botonera  (v2.1.0 deprecado)
UDA-Componentes RUP. Botonera (v2.1.0 deprecado)
 
Servicios web
Servicios webServicios web
Servicios web
 
UDA-Componentes RUP. Idioma
UDA-Componentes RUP. IdiomaUDA-Componentes RUP. Idioma
UDA-Componentes RUP. Idioma
 
Django - Plataforma de sitios web
Django - Plataforma de sitios webDjango - Plataforma de sitios web
Django - Plataforma de sitios web
 
UDA-Componentes RUP. Jerarquía (v2.1.1 deprecado)
UDA-Componentes RUP. Jerarquía  (v2.1.1 deprecado)UDA-Componentes RUP. Jerarquía  (v2.1.1 deprecado)
UDA-Componentes RUP. Jerarquía (v2.1.1 deprecado)
 

Más de Ander Martinez

Arinbide Adaptativo. Visión del producto.v1.0
Arinbide Adaptativo. Visión del producto.v1.0Arinbide Adaptativo. Visión del producto.v1.0
Arinbide Adaptativo. Visión del producto.v1.0Ander Martinez
 
Arinbide Adaptativo. Retrospectiva.v1.0
Arinbide Adaptativo. Retrospectiva.v1.0Arinbide Adaptativo. Retrospectiva.v1.0
Arinbide Adaptativo. Retrospectiva.v1.0Ander Martinez
 
Arinbide Adaptativo. Plan de entregas.v1.0
Arinbide Adaptativo. Plan de entregas.v1.0Arinbide Adaptativo. Plan de entregas.v1.0
Arinbide Adaptativo. Plan de entregas.v1.0Ander Martinez
 
Arinbide Adaptativo. Pila de sprint.v1.0
Arinbide Adaptativo. Pila de sprint.v1.0Arinbide Adaptativo. Pila de sprint.v1.0
Arinbide Adaptativo. Pila de sprint.v1.0Ander Martinez
 
Arinbide Adaptativo. Pila de producto.v1.0
Arinbide Adaptativo. Pila de producto.v1.0Arinbide Adaptativo. Pila de producto.v1.0
Arinbide Adaptativo. Pila de producto.v1.0Ander Martinez
 
Arinbide Adaptativo. Pila de impedimentos.v1.1
Arinbide Adaptativo. Pila de impedimentos.v1.1Arinbide Adaptativo. Pila de impedimentos.v1.1
Arinbide Adaptativo. Pila de impedimentos.v1.1Ander Martinez
 
Arinbide Adaptativo. Normas, participantes y procedimientos.v1.0
Arinbide Adaptativo. Normas, participantes y procedimientos.v1.0Arinbide Adaptativo. Normas, participantes y procedimientos.v1.0
Arinbide Adaptativo. Normas, participantes y procedimientos.v1.0Ander Martinez
 
Arinbide Adaptativo. Monitorización.v1.0
Arinbide Adaptativo. Monitorización.v1.0Arinbide Adaptativo. Monitorización.v1.0
Arinbide Adaptativo. Monitorización.v1.0Ander Martinez
 
Arinbide Adaptativo. Manual de usuario.v1.0
Arinbide Adaptativo. Manual de usuario.v1.0Arinbide Adaptativo. Manual de usuario.v1.0
Arinbide Adaptativo. Manual de usuario.v1.0Ander Martinez
 
Arinbide Adaptativo. Diseño técnico.v1.0
Arinbide Adaptativo. Diseño técnico.v1.0Arinbide Adaptativo. Diseño técnico.v1.0
Arinbide Adaptativo. Diseño técnico.v1.0Ander Martinez
 
Arinbide Adaptativo. Defectos y errores .v1.0
Arinbide Adaptativo. Defectos y errores .v1.0Arinbide Adaptativo. Defectos y errores .v1.0
Arinbide Adaptativo. Defectos y errores .v1.0Ander Martinez
 
Arinbide Adaptativo. Acta de reunión.v1.1
Arinbide Adaptativo. Acta de reunión.v1.1Arinbide Adaptativo. Acta de reunión.v1.1
Arinbide Adaptativo. Acta de reunión.v1.1Ander Martinez
 
Arinbide adaptativo. Anexo. Conceptos básicos. v1.0
Arinbide adaptativo. Anexo. Conceptos básicos. v1.0Arinbide adaptativo. Anexo. Conceptos básicos. v1.0
Arinbide adaptativo. Anexo. Conceptos básicos. v1.0Ander Martinez
 
Arinbide adaptativo.v1.0
Arinbide adaptativo.v1.0Arinbide adaptativo.v1.0
Arinbide adaptativo.v1.0Ander Martinez
 
UDA-Componentes RUP. Mensajes (v2.1.1 deprecado)
UDA-Componentes RUP. Mensajes (v2.1.1 deprecado)UDA-Componentes RUP. Mensajes (v2.1.1 deprecado)
UDA-Componentes RUP. Mensajes (v2.1.1 deprecado)Ander Martinez
 
UDA-Anexo uso de webDAV
UDA-Anexo uso de webDAVUDA-Anexo uso de webDAV
UDA-Anexo uso de webDAVAnder Martinez
 

Más de Ander Martinez (17)

Arinbide Adaptativo. Visión del producto.v1.0
Arinbide Adaptativo. Visión del producto.v1.0Arinbide Adaptativo. Visión del producto.v1.0
Arinbide Adaptativo. Visión del producto.v1.0
 
Arinbide Adaptativo. Retrospectiva.v1.0
Arinbide Adaptativo. Retrospectiva.v1.0Arinbide Adaptativo. Retrospectiva.v1.0
Arinbide Adaptativo. Retrospectiva.v1.0
 
Arinbide Adaptativo. Plan de entregas.v1.0
Arinbide Adaptativo. Plan de entregas.v1.0Arinbide Adaptativo. Plan de entregas.v1.0
Arinbide Adaptativo. Plan de entregas.v1.0
 
Arinbide Adaptativo. Pila de sprint.v1.0
Arinbide Adaptativo. Pila de sprint.v1.0Arinbide Adaptativo. Pila de sprint.v1.0
Arinbide Adaptativo. Pila de sprint.v1.0
 
Arinbide Adaptativo. Pila de producto.v1.0
Arinbide Adaptativo. Pila de producto.v1.0Arinbide Adaptativo. Pila de producto.v1.0
Arinbide Adaptativo. Pila de producto.v1.0
 
Arinbide Adaptativo. Pila de impedimentos.v1.1
Arinbide Adaptativo. Pila de impedimentos.v1.1Arinbide Adaptativo. Pila de impedimentos.v1.1
Arinbide Adaptativo. Pila de impedimentos.v1.1
 
Arinbide Adaptativo. Normas, participantes y procedimientos.v1.0
Arinbide Adaptativo. Normas, participantes y procedimientos.v1.0Arinbide Adaptativo. Normas, participantes y procedimientos.v1.0
Arinbide Adaptativo. Normas, participantes y procedimientos.v1.0
 
Arinbide Adaptativo. Monitorización.v1.0
Arinbide Adaptativo. Monitorización.v1.0Arinbide Adaptativo. Monitorización.v1.0
Arinbide Adaptativo. Monitorización.v1.0
 
Arinbide Adaptativo. Manual de usuario.v1.0
Arinbide Adaptativo. Manual de usuario.v1.0Arinbide Adaptativo. Manual de usuario.v1.0
Arinbide Adaptativo. Manual de usuario.v1.0
 
Arinbide Adaptativo. Diseño técnico.v1.0
Arinbide Adaptativo. Diseño técnico.v1.0Arinbide Adaptativo. Diseño técnico.v1.0
Arinbide Adaptativo. Diseño técnico.v1.0
 
Arinbide Adaptativo. Defectos y errores .v1.0
Arinbide Adaptativo. Defectos y errores .v1.0Arinbide Adaptativo. Defectos y errores .v1.0
Arinbide Adaptativo. Defectos y errores .v1.0
 
Arinbide Adaptativo. Acta de reunión.v1.1
Arinbide Adaptativo. Acta de reunión.v1.1Arinbide Adaptativo. Acta de reunión.v1.1
Arinbide Adaptativo. Acta de reunión.v1.1
 
Arinbide adaptativo. Anexo. Conceptos básicos. v1.0
Arinbide adaptativo. Anexo. Conceptos básicos. v1.0Arinbide adaptativo. Anexo. Conceptos básicos. v1.0
Arinbide adaptativo. Anexo. Conceptos básicos. v1.0
 
Arinbide adaptativo.v1.0
Arinbide adaptativo.v1.0Arinbide adaptativo.v1.0
Arinbide adaptativo.v1.0
 
Arinbide.v3.0
Arinbide.v3.0Arinbide.v3.0
Arinbide.v3.0
 
UDA-Componentes RUP. Mensajes (v2.1.1 deprecado)
UDA-Componentes RUP. Mensajes (v2.1.1 deprecado)UDA-Componentes RUP. Mensajes (v2.1.1 deprecado)
UDA-Componentes RUP. Mensajes (v2.1.1 deprecado)
 
UDA-Anexo uso de webDAV
UDA-Anexo uso de webDAVUDA-Anexo uso de webDAV
UDA-Anexo uso de webDAV
 

Último

El uso de las tic en la vida ,lo importante que son
El uso de las tic en la vida ,lo importante  que sonEl uso de las tic en la vida ,lo importante  que son
El uso de las tic en la vida ,lo importante que son241514984
 
Presentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidadPresentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidadMiguelAngelVillanuev48
 
El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.241514949
 
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptxEl_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptxAlexander López
 
Google-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptx
Google-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptxGoogle-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptx
Google-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptxAlexander López
 
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.ppt
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.pptTEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.ppt
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.pptJavierHerrera662252
 
El uso delas tic en la vida cotidiana MFEL
El uso delas tic en la vida cotidiana MFELEl uso delas tic en la vida cotidiana MFEL
El uso delas tic en la vida cotidiana MFELmaryfer27m
 
Plan Sarmiento - Netbook del GCBA 2019..
Plan Sarmiento - Netbook del GCBA 2019..Plan Sarmiento - Netbook del GCBA 2019..
Plan Sarmiento - Netbook del GCBA 2019..RobertoGumucio2
 
Mapa-conceptual-del-Origen-del-Universo-3.pptx
Mapa-conceptual-del-Origen-del-Universo-3.pptxMapa-conceptual-del-Origen-del-Universo-3.pptx
Mapa-conceptual-del-Origen-del-Universo-3.pptxMidwarHenryLOZAFLORE
 
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6    CREAR UN RECURSO MULTIMEDIAActividad integradora 6    CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA241531640
 
FloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptxFloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptx241522327
 
Hernandez_Hernandez_Practica web de la sesion 11.pptx
Hernandez_Hernandez_Practica web de la sesion 11.pptxHernandez_Hernandez_Practica web de la sesion 11.pptx
Hernandez_Hernandez_Practica web de la sesion 11.pptxJOSEMANUELHERNANDEZH11
 
tics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptxtics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptxazmysanros90
 
dokumen.tips_36274588-sistema-heui-eui.ppt
dokumen.tips_36274588-sistema-heui-eui.pptdokumen.tips_36274588-sistema-heui-eui.ppt
dokumen.tips_36274588-sistema-heui-eui.pptMiguelAtencio10
 
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptxLAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptxAlexander López
 
La era de la educación digital y sus desafios
La era de la educación digital y sus desafiosLa era de la educación digital y sus desafios
La era de la educación digital y sus desafiosFundación YOD YOD
 
definicion segun autores de matemáticas educativa
definicion segun autores de matemáticas  educativadefinicion segun autores de matemáticas  educativa
definicion segun autores de matemáticas educativaAdrianaMartnez618894
 
GonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptxGonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptx241523733
 
Arenas Camacho-Practica tarea Sesión 12.pptx
Arenas Camacho-Practica tarea Sesión 12.pptxArenas Camacho-Practica tarea Sesión 12.pptx
Arenas Camacho-Practica tarea Sesión 12.pptxJOSEFERNANDOARENASCA
 
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptxMedidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptxaylincamaho
 

Último (20)

El uso de las tic en la vida ,lo importante que son
El uso de las tic en la vida ,lo importante  que sonEl uso de las tic en la vida ,lo importante  que son
El uso de las tic en la vida ,lo importante que son
 
Presentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidadPresentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidad
 
El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.
 
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptxEl_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
 
Google-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptx
Google-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptxGoogle-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptx
Google-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptx
 
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.ppt
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.pptTEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.ppt
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.ppt
 
El uso delas tic en la vida cotidiana MFEL
El uso delas tic en la vida cotidiana MFELEl uso delas tic en la vida cotidiana MFEL
El uso delas tic en la vida cotidiana MFEL
 
Plan Sarmiento - Netbook del GCBA 2019..
Plan Sarmiento - Netbook del GCBA 2019..Plan Sarmiento - Netbook del GCBA 2019..
Plan Sarmiento - Netbook del GCBA 2019..
 
Mapa-conceptual-del-Origen-del-Universo-3.pptx
Mapa-conceptual-del-Origen-del-Universo-3.pptxMapa-conceptual-del-Origen-del-Universo-3.pptx
Mapa-conceptual-del-Origen-del-Universo-3.pptx
 
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6    CREAR UN RECURSO MULTIMEDIAActividad integradora 6    CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA
 
FloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptxFloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptx
 
Hernandez_Hernandez_Practica web de la sesion 11.pptx
Hernandez_Hernandez_Practica web de la sesion 11.pptxHernandez_Hernandez_Practica web de la sesion 11.pptx
Hernandez_Hernandez_Practica web de la sesion 11.pptx
 
tics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptxtics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptx
 
dokumen.tips_36274588-sistema-heui-eui.ppt
dokumen.tips_36274588-sistema-heui-eui.pptdokumen.tips_36274588-sistema-heui-eui.ppt
dokumen.tips_36274588-sistema-heui-eui.ppt
 
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptxLAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
 
La era de la educación digital y sus desafios
La era de la educación digital y sus desafiosLa era de la educación digital y sus desafios
La era de la educación digital y sus desafios
 
definicion segun autores de matemáticas educativa
definicion segun autores de matemáticas  educativadefinicion segun autores de matemáticas  educativa
definicion segun autores de matemáticas educativa
 
GonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptxGonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptx
 
Arenas Camacho-Practica tarea Sesión 12.pptx
Arenas Camacho-Practica tarea Sesión 12.pptxArenas Camacho-Practica tarea Sesión 12.pptx
Arenas Camacho-Practica tarea Sesión 12.pptx
 
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptxMedidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
 

UDA-Componentes RUP. Combo (v2.1.1 deprecado)

  • 1. UDA – Utilidades de desarrollo de aplicaciones by EJIE is licensed under a Creative Commons Reconocimiento- NoComercial-CompartirIgual 3.0 Unported License. UDA - Utilidades de Desarrollo de Aplicaciones Componentes RUP – Combo Fecha: 22/11/2013 Referencia: EJIE S.A. Mediterráneo, 14 Tel. 945 01 73 00* Fax. 945 01 73 01 01010 Vitoria-Gasteiz Posta-kutxatila / Apartado: 809 01080 Vitoria-Gasteiz www.ejie.es
  • 2. Componentes RUP – Combo ii/30 Control de documentación Título de documento: Componentes RUP – Combo Histórico de versiones Código: Versión: Fecha: Resumen de cambios: 1.0.0 06/06/2011 Primera versión. 1.0.1 18/07/2011 Correcciones en los números de versión de ficheros, nuevo atributo i18nId. 1.1.0 14/09/2011 Actualización de las versiones de las librerías JavaScript subyacentes. Añadido el apartado Integración con UDA. 1.2.0 14/12/2011 Nuevos métodos getRupValue y setRupValue para la interacción con los demás componentes RUP. 1.2.1 22/02/2012 Nuevo método selectLabel. Modificado el comportamiento del método select. 2.0.0 11/07/2012 Cambios de formato y correcciones ortográficas. Añadido de algunas funciones de gestión nuevas. 2.1.0 18/09/2012 Actualización de las versiones de las librerías JavaScript subyacentes. Añadido el apartado de precarga de datos Inclusión del evento onLoadSucces. 2.1.1 09/01/2013 Permitir la selección múltiple. Modificación de estilos para colorear líneas pares o impares configurable. 2.4.0 22/11/2013 Se distribuye la versión minimizada de los ficheros javascript y de estilos de RUP. Cambios producidos desde la última versión Se distribuye la versión minimizada de los ficheros javascript y de estilos de RUP.
  • 3. Componentes RUP – Combo iii/30 Control de difusión Responsable: Ander Martínez Aprobado por: Firma: Fecha: Distribución: Referencias de archivo Autor: Nombre archivo: Localización:
  • 4. Componentes RUP – Combo iv/30 Contenido Capítulo/sección Página 1. Introducción 6 2. Ejemplo 6 3. Casos de uso 6 4. Infraestructura 7 4.1. Ficheros 7 4.2. Dependencias 7 4.3. Versión minimizada 7 5. Invocación 8 6. Parámetros 8 7. Funciones 16 8. Eventos 19 9. Comunicación remota 20 9.1. Option Groups Remotos 21 10. Combos enlazados 24 10.1. Local 24 10.2. Remoto 24 11. Precarga de datos 26 11.1. Carga a partir del elemento HTML select 26 11.2. Carga a partir de un objeto JSON 27 12. Sobreescritura del theme 28 13. Integración con UDA 30
  • 5. Componentes RUP – Combo v/30
  • 6. Componentes RUP – Combo 6/30 1. Introducción La descripción del Componente Combo, visto desde el punto de vista de RUP, es la siguiente: Permite al usuario recuperar un elemento de una gran lista de elementos o de varias listas dependientes de forma sencilla y ocupando poco espacio en la interfaz. 2. Ejemplo Se presentan a continuación un ejemplo de este componente: Selección simple Selección múltiple 3. Casos de uso Se aconseja la utilización de este componente: • Cuando la entrada de datos dependa de una selección de información previa. El ejemplo más común es la selección de provincia y municipio.
  • 7. Componentes RUP – Combo 7/30 4. Infraestructura A continuación se comenta la infraestructura necesaria para el correcto funcionamiento del componente. • Únicamente se requiere la inclusión de los ficheros que implementan el componente (js y css) comentados en los apartados Ficheros y Dependencias. 4.1. Ficheros Ruta Javascript: rup/scripts/ Fichero de plugin: rup.combo-x.y.z.js Ruta theme: rup/basic-theme/ Fichero CSS del theme: theme.rup.combo-x.y.z.css 4.2. Dependencias Por la naturaleza de desarrollo de los componentes (patrones) como plugins basados en la librería JavaScript jQuery, es necesaria la inclusión del esta. La versión elegida para el desarrollo ha sido la versión 1.8.0. • jQuery 1.8.0: http://jquery.com/ La gestión de la ciertas partes visuales de los componentes, se han realizado mediante el plugin jQuery UI que se basa en jQuery y se utiliza para construir aplicaciones web altamente interactivas. Este plugin, proporciona abstracciones de bajo nivel de interacción y animación, efectos avanzados de alto nivel, componentes personalizables (estilos) ente otros. La versión utilizada en el desarrollo ha sido la 1.8.23. • jQuery UI 1.8.23: http://jqueryui.com/ Los ficheros necesarios para el correcto funcionamiento del componente son: • jquery-1.8.0.js • jquery-ui-1.8.23.custom.js • jquery-ui-1.8.23.custom.css • jquery.ui.selectmenu.js • rup.base-x.y.z.js • rup.combo-x.y.z.js • theme.rup.combo-x.y.z.css 4.3. Versión minimizada A partir de la versión v2.4.0 se distribuye la versión minimizada de los componentes RUP. Estos ficheros contienen la versión compactada y minimizada de los ficheros javascript y de estilos necesarios para el uso de todos los compontente RUP. Los ficheros minimizados de RUP son los siguientes: • rup/scripts/min/rup.min-x.y.z.js
  • 8. Componentes RUP – Combo 8/30 • rup/basic-theme/rup.min-x.y.z.css Estos ficheros son los que deben utilizarse por las aplicaciones. Las versiones individuales de cada uno de los componentes solo deberán de emplearse en tareas de desarrollo o depuración. 5. Invocación Este componente se invocará mediante un selector que indicará todos los elementos sobre los que se va a aplicar el componente Combo. Por ejemplo: $("#id_input").rup_combo (properties); Donde el parámetro “properties” es un objeto ( var properties = {}; ) o bien directamente la declaración de lo valores directamente. Sus posibles valores se detallan en el siguiente apartado. 6. Parámetros A continuación se muestran los posibles parámetros de configuración que recibe el componente. • source: este parámetro determina el tipo de combo: local o remoto y define los datos que va a tener el combo. o remoto se define la URL a la que se solicitan los datos a cargar: source : "combo/remote" Los datos devueltos por el servidor deberán seguir esta estructura JSON (el parámetro style es opcional en caso de querer mostrar una imagen): [ {label: "Autocomplete_es", value:"Autocomplete", style:"aaa"}, {label: "Combo_es", value:"Combo ", style:"bbb"}, {label: "Dialog_es", value:"Dialog", style:"ccc"}, ... ] o local carga los datos del fichero js desplegado como contenido estático y puede ser de dos tipos si los literales a mostrar dependen del idioma o no: sin dependencia: se define un array en JSON con los datos: source : ["asp", "c", "c++", "coldfusion", "groovy", "haskell", "java", "javascript", "perl", "php", "python", "ruby", "scala"] con dependencia: se define un array en JSON de objetos con su valor (value), su literal a mostrar (i18nCaption) y su imagen en caso de tenerla (style):
  • 9. Componentes RUP – Combo 9/30 source : [ {i18nCaption: "asp", value:"asp_value", style:"s_asp" }, {i18nCaption: "c", value:"c_value", style:"s_c" }, {i18nCaption: "c++", value:"c++_value", style:"s_c++" }, {i18nCaption: "coldfusion", value:"coldfusion_value", style:"s_coldfusion " }, ... ] NOTA: Las imágenes en los combos locales sin dependencia idiomática se definen mediante el parámetro imgs (explicado más adelante). NOTA2: Los combos dependientes o enlazados y su configuración se explican en el apartado 10. La internacionalización se realiza mediante el fichero de recursos definido para la aplicación que se encontrará en la parte estática bajo codAplic/resources/codAplic.i18n.json (con sus variantes según idioma ej: codAplic/resources/codAplic.i18n_es.json). En dicho fichero se deberá declarar un objeto JSON cuyo nombre sea el mismo que el id del elemento HTML sobre el que se aplica el componente. Ejemplo: "combo" : { "asp":"asp_es", "c":"c_es", "c++":"c++_es", "coldfusion":"coldfusion_es", "groovy":"groovy_es", "haskell":"haskell_es", "java":"java_es", "javascript":"javascript_es", "perl":"perl_es", "php":"php_es", "python":"python_es", "ruby":"ruby_es", "scala":"scala_es" } • sourceGroup: este parámetro se utiliza en lugar del parámetro source en aquellos combos que se quieran agrupar elementos bajo una misma denominación. Cada elemento deberá tener un identificador único para poder distinguir el elemento seleccionado. La fuente de los datos puede ser local o remota (en el caso de petición retoma se deberá definir el parámetro sourceParam):
  • 10. Componentes RUP – Combo 10/30 o remoto se define la URL a la que se solicitan los datos a cargar: sourceGroup : "combo/remoteGroup" Los datos devueltos por el servidor deberán seguir esta estructura JSON (el parámetro style es opcional en caso de querer mostrar una imagen): sourceGroup : [ {"Futbol" : [ {label: "Alaves", value:"alaves", style:"aaa"}, {label: "Athletic", value:"ath", style:"bbb"}, {label: "Real Sociedad", value:"real", style:"ccc"} ]}, {"Baloncesto" : [ {label: "Caja Laboral", value:"laboral", style:"ddd"}, {label: "BBB", value:"bilbao", style:"eee"}, {label: "Lagun aro", value:"lagun aro", style:"fff"} ]}, {"Formula 1" : [ {label: "Fernando Alonso", value:"falonso"}, {label: "Lewis Hamilton", value:"hamilton"}, {label: "Sebastián Vettel", value:"vettel"} ]} ] NOTA: Los “option groups remotos” se detallan en el apartado 9.1. o local puede ser de dos tipos si los literales a mostrar dependen del idioma o no: sin dependencia: se define un array en JSON con los datos: sourceGroup : [ {"Futbol" : ["Alaves", "Athletic", "Real Sociedad"]}, {"Baloncesto" : ["Caja Laboral", "BBB", "Lagun Aro"]},
  • 11. Componentes RUP – Combo 11/30 {"Formula 1" : [ "Fernando Alonso", "Hamilton", "Vettel"]} ] con dependencia: se define un array en JSON de objetos con su valor (value) y su literal a mostrar (i18nCaption). El literal empleado para la cabecera del grupo también tomará su valor del fichero de recursos: sourceGroup : [ {"futbol" : [ {i18nCaption: "alaves", value:"alaves_value"}, {i18nCaption: "ath", value:"ath_value"}, {i18nCaption: "real", value:"real_value"} ]}, {"baloncesto" : [ {i18nCaption: "laboral", value:"laboral_value"}, {i18nCaption: "bilbao", value:"bilbao_value"}, {i18nCaption: "lagun aro", value:"lagun aro_value"} ]}, {"formula1" : [ {i18nCaption: "falonso", value:"falonso_value"}, {i18nCaption: "hamilton", value:"hamilton_value"}, {i18nCaption: "vettel", value:"vettel_value"} ]} ] • sourceParam: en el caso de un combo remoto, deben configurarse los siguientes datos: o label: nombre de la columna de BBDD de la que se extrae la descripción (el literal a mostrar). o value: nombre de la columna de BBDD de la que se extrae el valor. o style: nombre de la columna de BBDD de la que se extrae el estilo (css) a aplicar al dato. Por ejemplo: sourceParam: { label:"desc"+$.rup_utils.capitalizedLang, value:"code", style:"css" } NOTA: En caso de utilizar una disposición horizontal para el idioma (varias columnas según idioma) se podrá hacer uso de la función $.rup_utils.capitalizaedLang().lang que devuelve el idioma actual (es, eu, …) capitalizado para concatenarlo al nombre de la columna y obtener así el nombre de la columna que se desea, ej.: descEs / descEu. • selected: indica el elemento que se seleccionará por defecto al cargarse el combo. Puede declararse tanto un valor numérico que representa la posición del elemento en el combo (empezando en 0) o un valor alfabético que representa el valor del elemento del combo. Ejemplo selección posición: selected: 6
  • 12. Componentes RUP – Combo 12/30 Ejemplo selección valor: selected: “asp_value” • blank: se utiliza para declarar un valor independiente de la lógica del negocio. Su valor por defecto es null. En ocasiones se representa como “Seleccione un elemento”. Ejemplo de definición de la propiedad: blank : "0" Esta propiedad define el valor que va a tener dicho elemento y su descripción se recuperará de la propiedad _blank perteneciente a la estructura JSON cuyo nombre será el identificativo del combo. Esta estructura deberá contenerse en el fichero de literales de la aplicación. Ejemplo de la estructura JSON: "combo" : { "_blank":"[Seleccione un elemento]", … } En caso de no definir el literal para el elemento “_blank” se tomará el valor por defecto de RUP (rupresourcesrup.i18n_xx.json): "rup_combo": { "blankNotDefined": "[Falta literal]", … } Si se desea sobrescribir el literal vacío para todos los combos de una aplicación (estableciendo en todos el mismo valor) se recomienda sobrescribir el valor por defecto. Pero no modificando directamente el fichero de recursos de RUP (ya que en posibles actualizaciones podría perderse el cambio) si no por ejemplo desde el layoutLoader de la aplicación: $.rup.i18n.base.rup_combo.blankNotDefined = "----"; • width: determina el tamaño del combo. Su valor por defecto es 200 para la selección simple. En el caso de selección múltiple su declaración es obligatoria. • style: determina el tipo de combo a utilizar (sólo selección simple). Existen dos opciones: dropdown y popup. El combo dropdown despliega el contenedor de opciones hacia abajo a partir de su situación en pantalla, el combo popup en cambio despliega el contenedor de opciones en función de la opción elegida moviendo hacia arriba o hacia abajo dicho desplegable. Su valor por defecto es dropdown. Ejemplo de combo dropdown:
  • 13. Componentes RUP – Combo 13/30 Ejemplo de combo popup: • maxHeight: indica el tamaño máximo en altura (sólo selección simple), que puede tomar el desplegable del menú. Su valor por defecto es null. • menuWidth: indica el tamaño en anchura que debe tomar el desplegable del menú (sólo selección simple). Su valor por defecto es null. • format: define una función que formatee los datos (sólo selección simple). Por ejemplo sacando un combo con varias líneas por elemento:
  • 14. Componentes RUP – Combo 14/30 Por defecto se incluye una función que parsea el contenido de tal manera que el combo se visualice como e muestra en la imagen. Para lanzar esta función se pasará el parámetro “default”. Los datos necesarios para el ejemplo son los siguientes: source: [ "John Doe - 78 West Main St Apt 3A | Bloomsburg, PA 12345 (footer text)", "Jane Doe - 78 West Main St Apt 3A | Bloomsburg, PA 12345 (footer text)", "Joseph Doe - 78 West Main St Apt 3A | Bloomsburg, PA 12345 (footer text)", "Mad Doe Kiiid - 78 West Main St Apt 3A | Bloomsburg, PA 12345 (footer text)" ] Se incluye el código de la función de parseo para mostrar la manera de implementar este tipo de funciones: function(text){ var findreps = [ {find:/^([^-]+) - /g, rep: '<span class="ui-selectmenu-item- header">$1</span>'}, {find:/([^|><]+) | /g, rep: '<span class="ui-selectmenu- item-content">$1</span>'}, {find:/([^|><()]+) (()/g, rep: '<span class="ui- selectmenu-item-content">$1</span>$2'}, {find:/([^|><()]+)$/g, rep: '<span class="ui-selectmenu- item-content">$1</span>'}, {find:/(([^|><]+))$/g, rep: '<span class="ui-selectmenu- item-footer">$1</span>'} ]; for(var i in findreps){ text = text.replace(findreps[i].find, findreps[i].rep); }
  • 15. Componentes RUP – Combo 15/30 return text; }; • imgs: define las imágenes a mostrar delante de la descripción de cada elemento (solo combos locales sin selección múltiple). Se define una estructura JSON que será un array de elementos cuya clave será el valor que toma el elemento del combo y cuyo valor será el estilo a aplicar a dicho elemento. Su uso principal será aquellas combos locales no dependientes del idioma ya que en las dependientes del idioma se puede configurar directamente en la imagen mediante el parámetro style . A continuación se muestra un ejemplo: imgs : [ {Borrar: "delete"}, {Filtrar: "filter"}, {Imprimir: "print"} ] • disabled: determina si se deshabilita el combo al ser cargado inicialmente. Su valor por defecto es false. • showValue: determina si el combo debe mostrar el valor asociado concatenado al literal (sólo selección simple). Su valor por defecto es false. • token: define el separador a utilizar cuando se muestra el valor asociado al combo concatenado al literal. Su valor por defecto es |. • multiValueToken: define el separador a utilizar en combos enlazados locales. Su valor por defecto es ##. Este atributo de detalle en el apartado de combos enlazados locales (10.1). • ordered: indica si el combo debe ordenarse. Su valor por defecto es true. • orderedByValue: indica si el la ordenación del combo debe realizarse por el valor de los elementos en lugar de por el texto. Su valor por defecto es false. • i18nId: indica el identificador del objeto JSON que se utilizará para recuperar los valores de los literales a mostrar (combos locales). En caso de no definirse se utilizará por defecto el identificador del objeto sobre el que se aplica el combo. • multiselect: indica si el combo permite la selección múltiple. Su valor por defecto es false. • multiOptgroupIconText: indica si se desea que en la selección múltiple con grupos, el nombre del grupo tenga descripción en los iconos para seleccionar/deseleccionar los elementos del grupo. Su valor por defecto es false. • submitAsString: indica si el envío de los elementos seleccionados en la selección múltiple se realiza como un literal separados por coma. Su valor por defecto es false.
  • 16. Componentes RUP – Combo 16/30 • submitAsJSON: indica si el envío de los elementos seleccionados en la selección múltiple se realiza como un array JSON donde el nombre del mapa será el nombre del combo. En el caso de que el nombre contenga notación dot se tomará el último literal. Ej: [{id:1}, {id:2}, …]. Su valor por defecto es false y tiene prioridad sobre el submitAsString (se evalúa antes). • rowStriping: indica si se debe aplicar un estilo diferente a las filas pares e impares para poder distinguirlas mediante un color diferente. Su valor por defecto es false. 7. Funciones A continuación se detallan las diferentes funciones que integran el componente Combo: • select: selecciona el elemento enviado como parámetro. En caso de ser un numérico se selecciona por la posición (comenzando en 0) y si es un literal se selecciona por el valor. En el caso de selección múltiple el parámetro será un array. La invocación se realizará de la siguiente manera: $(selector).rup_combo("select", 2); //Simple $(selector).rup_combo("select", [0,2]); //Múltiple • selectLabel: selecciona el elemento del combo que contiene como texto el indicado. En caso de no existir el texto a buscar el combo no sufrirá cambios En el caso de selección múltiple el parámetro será un array. La invocación se realizará de la siguiente manera: $(selector).rup_combo("selectLabel", "No"); //Simple $(selector).rup_combo("select", [‘No’, ‘Sí’]); //Múltiple • index: devuelve el índice de la opción seleccionada en el combo (empezando en 0). En el caso de la selección múltiple se devolverá un array. La invocación se realizará de la siguiente manera:
  • 17. Componentes RUP – Combo 17/30 $(selector).rup_combo("index"); • enable: habilita el combo. La invocación se realizará de la siguiente manera: $(selector).rup_combo("enable"); • disable: deshabilita el combo. La invocación se realizará de la siguiente manera: $(selector).rup_combo("disable"); • isDisabled: indica si el combo está habilitado o no. La invocación se realizará de la siguiente manera: $(selector).rup_combo("isDisabled"); • disableChild: vacía y deshabilita el combo sobre el que se aplica así como todos los combos que depende de él. Su uso principalmente es interno para las peticiones remotas pero se puede invocar de la siguiente manera: $(selector).rup_combo("disableChild"); • reload: recarga el combo sobre el que se aplica. Su uso principalmente es interno para las peticiones remotas pero se puede invocar de la siguiente manera: $(selector).rup_combo("reload"); • order: ordena alfanumericamente y en orden ascendente el combo sobre el que se aplica. Recibe dos parámetros: el primero indica si la búsqueda es por texto (por defecto) o si la búsqueda es por el valor; el segundo indica el valor del texto independiente de la lógica de negocio para que se omita en la ordenación. Se invoca por defecto al cargarse los combos a no se que se cambie el valor del atributo ordered en la creación. A continuación se muestra un ejemplo de cómo invocar la función: $(selector).rup_combo("order", false, -1); • getRupValue: método utilizado para obtener el valor del componente. Este método es el utilizado por el resto de componentes RUP para estandarizar la obtención del valor del combo. $(selector).rup_combo("getRupValue"); • setRupValue: método utilizado para asignar el valor al componente. Este método es el utilizado por el resto de componentes RUP para estandarizar la asignación del valor al Autocomplete. $(selector).rup_combo("setRupValue",value);
  • 18. Componentes RUP – Combo 18/30 • clear: método que limpia el valor seleccionado en el combo. En el caso de selección múltiple los valores seleccionados. $(selector).rup_combo("clear"); • value: método que devuelve el valor seleccionado en el combo. En caso de ser el valor vació, o sin selección, el valor devuelto es el asociado al “blank”. En el caso de la selección múltiple se devolverá un array. $(selector).rup_combo("value"); • label: método que devuelve el label asociado al valor seleccionado en el combo. En el caso de la selección múltiple se devolverá un array. $(selector).rup_combo("label");
  • 19. Componentes RUP – Combo 19/30 8. Eventos A continuación se detallan los eventos asociados al componente: • open: permite asociar una función que se ejecutará cuando se muestre el desplegable del combo. Se configura de la siguiente manera: $(selector).rup_combo({ open: function(){...} }); • change: permite asociar una función que se ejecutará cuando se cambie el elemento seleccionado en el combo. Se configura de la siguiente manera: $(selector).rup_combo({ change: function(){...} }); • select: permite asociar una función que se ejecutará cuando se seleccione un valor del combo. Se configura de la siguiente manera: $(selector).rup_combo({ select: function(){...} }); • close: permite asociar una función que se ejecutará cuando se oculte el desplegable del combo. Se configura de la siguiente manera: $(selector).rup_combo({ close: function(){...} }); • onLoadSucces: permite asociar una función de callBack que se ejecuta al producirse un error en la petición AJAX de carga remota. Se configura de la siguiente manera: $(selector).rup_combo({onLoadSucces: function(){...} });
  • 20. Componentes RUP – Combo 20/30 9. Comunicación remota El componente Combo permite recuperar los datos almacenados en base de datos. En el método del controller que recibe la petición se invocará al servicio encargado de recuperar los datos. Como no se va a realizar ningún filtrado por algún campo de la entidad ni se requiere de paginación, los parámetros serán null, null: @RequestMapping(value = "combo/remote", method=RequestMethod.GET) public @ResponseBody List<Patrones> getRemoteCombo(){ return patronesService.findAll(null, null); } El método devuelve una lista de entidades en este caso List<Patrones> donde cada entidad tendrá todos y cada uno de los atributos cargados con los valores de la Base de Datos. Al devolver la lista con la anotación @ResponseBody, entrará en funcionamiento Jackson (parseador de JSON de Spring) para convertir la lista JAVA en una lista JSON: • JAVA: patronesList : patronesList [0] code = Autocomplete descEs = Autocomplete_es descEu = Autocomplete_eu css = filter patronesList [1] code = Combo descEs = Combo_es descEu = Combo_eu css = print … • JSON: [ {code="Autocomplete", descEs="Autocomplete_es", descdescEu="Autcomplete_eu", css="filter" }, {code="Combo", descEs="Combo_es", descEu="Combo_eu", css="print" }, … ] Como se ha explicado en anteriormente en el atributo source en el apartado 8 (propiedades) el componente requiere de una estructura de terminada para cargar el combo: [ {label: "Autocomplete_es", value:"Autocomplete", style:"aaa"}, {label: "Combo_es", value:"Combo ", style:"bbb"}, {label: "Dialog_es", value:"Dialog", style:"ccc"}, ... ]
  • 21. Componentes RUP – Combo 21/30 La traducción entre la estructura devuelta por el controller y la que espera el componente se realiza mediante un serializador propio de UDA. Para que este entre en funcionamiento simplemente se deberá configurar el fichero mvc-config del WAR (/xxxWAR/WebContent/WEB-INF/spring/mvc-config.xml) indicando que el modelo utilizado utilice el serializador de UDA: <bean id="jacksonJsonCustomSerializerFactory" class="com.ejie.x38.serialization.CustomSerializerFactoryRegistry"> <property name="serializers"> <map> <entry key="com.ejie.x21a.model.Patrones" value-ref="customSerializer" /> ... </map> </property> </bean> NOTA: Al generar el código con el plugin de UDA, se añade este serializador para todos los objetos del modelo creados. 9.1. Option Groups Remotos El uso de “option groups remotos” requiere de un pequeño esfuerzo por parte del desarrollador ya que se deben recuperar los diferentes grupos a incluir en el combo invocando a sus respectivos servicios y agruparlos en la estructura que espera el componente Combo. Ejemplo: [ {"Futbol" : [ {label: "Alaves", value:"alaves", style:"aaa"}, {label: "Athletic", value:"ath", style:"bbb"}, {label: "Real Sociedad", value:"real", style:"ccc"} ]}, {"Baloncesto" : [ {label: "Caja Laboral", value:"laboral", style:"ddd"}, {label: "BBB", value:"bilbao", style:"eee"}, {label: "Lagun aro", value:"lagun aro", style:"fff"} ]}, {"Formula 1" : [ {label: "Fernando Alonso", value:"falonso"}, {label: "Lewis Hamilton", value:"hamilton"}, {label: "Sebastián Vettel", value:"vettel"} ]} ] El método encargado de recuperar los datos devolverá una lista que contiene un mapa por cada uno de los grupos. Dicho mapa, tendrá como clave el literal a mostrar en la cabecera del grupo y como valor una lista de entidades. La lista de entidades se traducirá a la estructura que espera el componente mediante el serializador de UDA explicado en el apartado anterior. A continuación se muestra un ejemplo de cómo debería ser el controller encargado de devolver un “option group remoto” en el que se cargarán las entidades de Provincia, Comarca, Localidad y Patrones: @RequestMapping(value = "combo/remoteGroup", method=RequestMethod.GET)
  • 22. Componentes RUP – Combo 22/30 public @ResponseBody List<HashMap<String, List<?>>> getRemoteComboGrupos(){ //Idioma Locale locale = LocaleContextHolder.getLocale(); //Retorno del método List<HashMap<String, List<?>>> retorno = new ArrayList<HashMap<String, List<?>>>(); //Nombres de los grupos según idioma String provincia = null, comarca = null, localidad = null, patrones = null; if (com.ejie.x38.util.Constants.EUSKARA.equals( locale.getLanguage())) { provincia = "Provincia_eu"; comarca = "Comarca_eu"; localidad = "Localidad_eu"; patrones = "Patrones_eu"; } else { provincia = "Provincia"; comarca = "Comarca"; localidad = "Localidad"; patrones = "Patrones"; } //Provincia HashMap<String, List<?>> group = new HashMap<String, List<?>>(); group.put(provincia, provinciaService.findAll(null, null)); retorno.add(group); //Comarca group = new HashMap<String, List<?>>(); group.put(comarca, comarcaService.findAll(null, null)); retorno.add(group); //Localidad group = new HashMap<String, List<?>>(); group.put(localidad, localidadService.findAll(null, null)); retorno.add(group); //Patrones group = new HashMap<String, List<?>>(); group.put(patrones, patronesService.findAll(null, null)); retorno.add(group); return retorno; }
  • 23. Componentes RUP – Combo 23/30 Un ejemplo de la respuesta devuelta por este método del controlador sería la siguiente: [ {"Provincia_eu":[ {"style":"","value":"1","label":"Araba"}, {"style":"","value":"2","label":"Bizkaia"}, {"style":"","value":"3","label":"Gipuzkoa"} ]}, {"Comarca_eu":[ {"style":"","value":"3","label":"A-Zona3"}, {"style":"","value":"2","label":"A-Zona2"}, {"style":"","value":"1","label":"A-Zona1"}, {"style":"","value":"9","label":"Ezkerraldea"}, {"style":"","value":"8","label":"Eskumaldea"}, {"style":"","value":"7","label":"Bilbo Haundia"}, {"style":"","value":"6","label":"G-Zona3"}, {"style":"","value":"5","label":"G-Zona2"}, {"style":"","value":"4","label":"G-Zona1"} ]}, {"Localidad_eu":[ {"style":"","value":"3","label":"Galdakao"}, {"style":"","value":"2","label":"Basauri"}, {"style":"","value":"1","label":"Bilbo"}, {"style":"","value":"6","label":"Getxo"}, {"style":"","value":"5","label":"Areeta"}, {"style":"","value":"4","label":"Leioa"}, {"style":"","value":"9","label":"Barakaldo"}, {"style":"","value":"8","label":"Portugalete"}, {"style":"","value":"7","label":"Sestao"}]}, {"Patrones_eu":[ {"style":"filter","value":"Autocomplete","label":"Autocomplete_eu"}, {"style":"print","value":"Combo","label":"Combo_eu"}, {"style":"delete","value":"Dialog","label":"Dialog_eu"}, {"style":"filter","value":"Feedback","label":"Feedback_eu"}, {"style":"print","value":"Grid","label":"Grid_eu"}, {"style":"delete","value":"Maint","label":"Maint_eu"}, {"style":"filter","value":"Menu","label":"Menu_eu"}, {"style":"print","value":"Message","label":"Message_eu"}, {"style":"delete","value":"Tabs","label":"Tabs_eu"}, {"style":"filter","value":"Toolbar","label":"Toolbar_eu"}, {"style":"print","value":"Tooltip","label":"Tooltip_eu"} ]} ]
  • 24. Componentes RUP – Combo 24/30 10. Combos enlazados Mediante el uso del componente Combo, se pueden encadenar dos o más combos de tal manera que los valores que se cargarán en uno dependan directamente del valor seleccionado en el otro. Es decir, crear combos enlazados (también conocidos como combos dependientes). Estos combos enlazados, pueden ser tanto locales o remotos. Para indicar que un combo depende directamente del valor de otro se utilizará el atributo parent, que será un array con los identificador(es) del padre(s). Veamos un ejemplo: parent: [ "departamento", "provincia" ], Las dependencias entre los combos pueden encadenarse de tal manera que se tenga un combo que depende de otro combo que a su vez depende de otro combo y así sucesivamente (incluso se pueden combinar combos locales con remotos indistintamente). Además es posible que un combo dependa a su vez de dos combos o más y no se cargará ni se activará hasta que todos sus padres hayan tomado un valor determinado. Al ser combos enlazados, si un combo elimina su selección (elige la opción por defecto “Seleccione un elemento” o elige una opción de cuyo valor no dependa ningún dato) todos sus combos hijos se vaciarán y se deshabilitarán. Además si un combo se deshabilita (o se inicializa deshabilitado), todos sus hijos se cargarán pero se mostrarán deshabilitados. A continuación veremos como se configuran/utilizan los combos enlazados locales y los remotos: 10.1. Local Cuando se desea utilizar el componente Combo enlazando datos locales se deben realizar una serie de configuraciones que se detallan a continuación: 1. La propiedad source del combo hijo, debe tener la siguiente estructura: source: {"v1":[xxx], "v2":[yyy], "v3":[zzz] } v1, v2, v3 : posible valor seleccionable en el combo padre [xxx], [yyy], [zzz] : estructura que posee un combo no dependiente (ver atributo o). 2. El combo hijo debe indicar en su configuración que depende del combo padre mediante la propiedad parent: parent: [ "comboPadre" ] 10.2. Remoto Cuando se desea utilizar el componente Combo enlazando datos remotos, se deben realizar una serie de configuraciones que se detallan a continuación: 1. El combo padre debe incluir en su código HTML el atributo name que define el nombre del parámetro que se va a enviar en la petición de carga del combo dependiente.
  • 25. Componentes RUP – Combo 25/30 2. El combo hijo debe indicar en su configuración que depende del combo padre mediante la propiedad parent. 3. El método del controller que recibe la petición de carga del hijo, contendrá en su signatura el atributo con el valor seleccionado en el combo padre y se utilizará como filtro en la búsqueda de datos. 4. Configurar el serializador de UDA. Código HTML: • El combo padre debe definir el nombre del parámetro en la petición de carga del combo hijo: <select id="comboPadreRemoto" name="provincia" class="rup-combo"></select> • El combo hijo: <select id="comboHijoRemoto" class="rup-combo"></select> Configuración js: • El combo padre: $('#comboPadreRemoto').rup_combo({ source : "comboEnlazado/remoteEnlazadoProvincia", ... }); • El combo hijo debe indicar cual/cuales son sus padre/s: $('#comboHijoRemoto').rup_combo({ parent: [ "comboPadreRemoto" ], source : "comboEnlazado/remoteEnlazadoComarca", ... }) Controller: • El método para la petición del combo padre: @RequestMapping(value = "comboEnlazado/remoteEnlazadoProvincia", method=RequestMethod.GET) public @ResponseBody List<Provincia> getEnlazadoProvincia() { return provinciaService.findAll(null, null); } • El método para la petición del combo hijo debe declarar el parámetro donde se recibe el elemento seleccionado en el padre: @RequestMapping(value = "comboEnlazado/remoteEnlazadoComarca", method=RequestMethod.GET) public @ResponseBody List<Comarca> getEnlazadoComarca( @RequestParam(value = "provincia", required = false) BigDecimal provincia_code) {
  • 26. Componentes RUP – Combo 26/30 //Convertir parámetros en entidad para búsqueda Provincia provincia = new Provincia(); provincia.setCode(provincia_code); Comarca comarca = new Comarca(); comarca.setProvincia(provincia); return comarcaService.findAll(comarca, null); } Serializador: Se indica que las entidades utilizadas se serialicen en el retorno del controller a la JSP: <bean id="jacksonJsonCustomSerializerFactory" class="com.ejie.x38.serialization.CustomSerializerFactoryRegistry"> <property name="serializers"> <map> <entry key="com.ejie.x21a.model.Provincia" value-ref="customSerializer" /> <entry key="com.ejie.x21a.model.Comarca" value-ref="customSerializer" /> ... </map> </property> </bean> 11. Precarga de datos La recuperación los datos proporcionados por el servidor de aplicaciones, se realiza mediante una petición AJAX. Con el objeto de minimizar el número de peticiones realizadas por el componente combo, se posibilita el realizar una precarga de los datos que va a presentar el combo sin necesidad de realizar la primera petición AJAX. Se proporcionan dos mecanismos para permitir realizar la carga inicial de los datos del combo: 11.1. Carga a partir del elemento HTML select En este caso el componente combo toma los valores existentes en los <option> del elemento select como valores a precargar. En el caso de que el componente deba de actualizar los datos en base a una acción del usuario, se realizará mediante una petición AJAX. A continuación se muestra un ejemplo de la implementación que se debería de realizar para que una invocación al componente combo utilice los datos existentes en un combo HTML para inicializarse. Suponemos que se desea cargar en un componente RUP combo, los datos de provincias. En el controller que realizará la navegación a la entrada del tiles correspondiente se realiza lo siguiente: @RequestMapping(value = "maint", method = RequestMethod.GET) public String getMaint(Model model) { List<Provincia> listaProvincias = provinciaService.findAll(null, null);
  • 27. Componentes RUP – Combo 27/30 model.addAttribute("provincias",listaProvincias); return "maint"; } La ejecución de este método del controller añadirá al atributo provincia del model la lista de provincias obtenidas a partir de la consulta a base de datos. Esto nos permitirá realizar la carga de datos del combo en la jsp. El siguiente paso es implementar en la jsp el combo HTML en el que se van a cargar los datos. Estos datos serán los utilizados para inicializar el componente RUP combo. <form:select path="provincia.id" class="formulario_linea_input" id="provincia" > <form:options items="${provincias}" itemLabel="dsO" itemValue="id"/> </form:select> Por último se deberá de realizar la invocación del componente RUP combo en el fichero js correspondiente a la página. jQuery("#provincia").rup_combo({ source : "../provincia", sourceParam : {label:"dsO", value:"id"}, width : 400, blank : "", loadFromSelect:true }); La invocación del componente se realizará de modo normal, indicando mediante el parámetro source una URL mediante la cual se podrá realizar una recarga de los datos. Entre los parámetros de configuración se debe de indicar mediante loadFromSelect:true que se utilice el contenido del combo HTML para la inicialización del componente. 11.2. Carga a partir de un objeto JSON De manera alternativa se puede proporcionar al componente de los datos con los que debe de inicializarse mediante un objeto JSON. Este objeto puede ser inicializado directamente o generado dinámicamente tanto en cliente como en el servidor de aplicaciones. El objeto json debe consistir en un array
  • 28. Componentes RUP – Combo 28/30 12. Sobreescritura del theme El componente combo se presenta con una apariencia visual definida en el fichero de estilos theme.rup.combo-x.y.z.css. Si se quiere modificar la apariencia del componente, se recomienda redefinir el/los estilos necesarios en un fichero de estilos propio de la aplicación situado dentro del proyecto de estáticos (codAppStatics/WebContent/codApp/styles). Los estilos del componente se basan en los estilos básicos de los widgets de jQuery UI, con lo que los cambios que se realicen sobre su fichero de estilos manualmente o mediante el uso de la herramienta Theme Roller podrán tener repercusión sobre todos los componentes que compartan esos mismos estilos (pudiendo ser el nivel de repercusión general o ajustado a un subconjunto de componentes). Ejemplo base de la estructura generada por el componente para selección simple: <a aria-owns=" id-menu" aria-haspopup="true" tabindex="0" href="#" role="button" id=" id-button" class="ui-selectmenu ui-widget ui-state-default ui-selectmenu- dropdown ui-corner-all" style="width: 300px;" aria-disabled="false"> <span class="ui-selectmenu-status">item1</span> <span class="ui-selectmenu-icon ui-icon ui-icon-triangle-1-s"></span> </a> <!-- at end of body--> <ul id="speedA_menu_318" role="menu" aria-labelledby="speedA_button_318" class="ui-selectmenu-menu ui-widget ui-widget-content ui-corner-all ui- selectmenu-menu-popup ui-selectmenu-open" style="width: 147px; left: 184.017px; top: 136.95px;"> <li class="whoo ui-corner-top ui-selectmenu-item-selected ui-state-active"> <a aria-selected="true" role="option" tabindex="-1" href="#">item1</a> </li> <li> <a aria-selected="false" role="option" tabindex="-1" href="#">item2</a> </li> <li> <a aria-selected="false" role="option" tabindex="-1" href="#">item3</a> </li> </ul> Ejemplo base de la estructura generada por el componente para selección simple: <button type="button" class="ui-multiselect ui-widget ui-state-default ui-corner-all ui- state-active" aria-haspopup="true" style="width: 406px;" aria-disabled="false"> <span class="ui-icon ui-icon-triangle-1-s"></span> <span>2 seleccionado(s)</span>
  • 29. Componentes RUP – Combo 29/30 </button> <!-- at end of body--> <div id="rup-multiCombo_multicombo" class="ui-multiselect-menu ui-widget ui-widget-content ui-corner-all" style="width: 398px; top: 291.9px; left: 63.15px; display: block;"> <div class="ui-widget-header ui-corner-all ui-multiselect-header ui-helper-clearfix"> <ul class="ui-helper-reset"> <li> <a href="#" class="ui-multiselect-all" oldtitle="Seleccionar todos los elementos" aria- describedby="ui-tooltip-4"> <span class="ui-icon ui-icon-check"></span> <span>Seleccionar todo</span> </a> </li> <li> <a href="#" class="ui-multiselect-none" oldtitle="Deseleccionar todos los elementos" aria- describedby="ui-tooltip-5"> <span class="ui-icon ui-icon-closethick"></span> <span>Deseleccionar todo</span> </a> </li> <li class="ui-multiselect-close"> <a class="ui-multiselect-close" href="#"> <span class="ui-icon ui-icon-circle-close"></span> </a> </li> </ul> </div> <ul class="ui-multiselect-checkboxes ui-helper-reset" style="height: 175px;"> <li class=" "> <label class="ui-corner-all" title="" for="ui-multiselect-multicombo-option-0"> <input type="checkbox" checked="checked" title="ruby" value="ruby_value" name="multiselect_multicombo" id="ui-multiselect-multicombo-option-0"> <span>ruby</span> </label> </li> ... </ul> </div> Estilos para colorear elementos pares e impares: .rup-combo_odd Elementos impares .rup-combo_even Elementos pares .rup-combo_groupOdd Cabecera de grupo impar .rup-combo_groupEven Cabecera de grupo par
  • 30. Componentes RUP – Combo 30/30 13. Integración con UDA En el caso de que el componente combo utilice datos obtenidos de una fuente remota, la comunicación con el servidor de aplicaciones se realizaría del siguiente modo: El componente Combo necesita que los datos remotos que le son servidos sigan la siguiente estructura: [ {"style":"print","value":"1","label":"Alava"}, {"style":"print","value":"2","label":"Vizcaya"}, {"style":"print","value":"3","label":"Gipuzcoa"}] ... ] Para este fin, el componente envía en la petición una cabecera de RUP con la información necesaria para realizar la serialización. {"label":"descEs","value":"code","style":"css"} Para realizar la serialización de los datos enviados como respuesta desde el servidor, se deberá de configurar el serializador de UDA para que genere la estructura JSON correcta para que el componente presente los datos. <bean id="jacksonJsonCustomSerializerFactory" class="com.ejie.x38.serialization.CustomSerializerFactoryRegistry"> <property name="serializers"> <map> <entry key="com.ejie.x21a.model.Provincia" value-ref="customSerializer" /> </map> </property> </bean> En el serializador deberá de declararse el model correspondiente a los datos que se envían desde el servidor.