Manual de Usuario Componentes de Menús Versión 1.8 Área de Aplicaciones Especiales y Arquitectura de Software Framework Atlas Componentes de Menu Hoja de Control Título Manual de usuario Componentes de Menú Documento de Referencia NORMATIVA ATLAS Responsable Área de Aplicaciones Especiales y Arquitectura de Software Versión 1.8 Fecha Versión 27/06/2014 Registro de Cambios Versión Causa del Cambio Responsable del Cambio Fecha del Cambio Área de Integración y Arquitectura de 1.0 Versión inicial del documento 1.1 Actualizadas capturas de las diferentes tipos de plantillas. 1.2 Se modifica el nombre del Area 1.3 Ampliada la descripción del atributo perfil 1.4 Corregidos errores en los atributos del menú horizontal. 1.5 Incluida la posibilidad de menús personalizados por usuario 1.6 Incluido apartado de personalización de plantillas Aplicaciones 25/05/2010 Área de Integración y Arquitectura de Aplicaciones 15/02/2011 Área de Aplicaciones Especiales y 1.7 1.8 Incluido punto 4.8 uso de menús obtenidos de base de datos Modificado punto 4.5 por la creación del nuevo componente menú visual. - Modificado punto 4.4 para llamar al nuevo menú vertical composite - Añadido apartado Indicador de Carga - Se ha añadido apartado de API JavaScript Arquitectura de Software 27/09/2011 Área de Aplicaciones Especiales y Arquitectura de Software 11/01/2012 Área de Aplicaciones Especiales y Arquitectura de Software 07/08/2012 Área de Aplicaciones Especiales y Arquitectura de Software 27/11/2013 Área de Aplicaciones Especiales y Arquitectura de Software 13/03/2014 Unidad de Arquitectura 12/5/2014 Unidad de Arquitectura 26/06/2014 2 de 37 Framework Atlas Componentes de Menu Índice 1. INTRODUCCIÓN ................................................................................................................................................................ 4 1.1. 1.2. AUDIENCIA OBJETIVO .............................................................................................................................................. 4 CONOCIMIENTOS PREVIOS ...................................................................................................................................... 4 2. DESCRIPCIÓN .................................................................................................................................................................... 5 3. INSTALACIÓN Y CONFIGURACIÓN............................................................................................................................. 5 3.1. INSTALACIÓN .............................................................................................................................................................. 5 3.2. CONFIGURACIÓN ....................................................................................................................................................... 5 3.2.1. Paso 1: Edición del fichero de opciones del menú ................................................................................................. 6 4. USO ........................................................................................................................................................................................ 7 4.1. PASO 1: SELECCIÓN DE LA PLANTILLA ............................................................................................................................ 7 4.2. PASO 3: CREACIÓN DEL FICHERO XHTML BASADO EN LA PLANTILLA ............................................................................. 14 4.3. PASO 3: INSERCIÓN DE LA ETIQUETA DE MENÚ HORIZONTAL........................................................................................ 17 4.4. PASO 4: INSERCIÓN DE LA ETIQUETA DE MENÚ VERTICAL ............................................................................................ 18 4.5. PASO 5: INSERCIÓN DE LA ETIQUETA DE MENÚ VISUAL ................................................................................................ 19 4.6. PERSONALIZACIÓN DE PLANTILLAS ................................................................................................................... 24 4.7. USO DE MENÚS PERSONALIZADOS POR USUARIO ........................................................................................... 26 4.8. USO DE MENU’S OBTENIDOS DE BASE DE DATOS ............................................................................................ 28 4.8.1. Crear el menú en base de datos ............................................................................................................................ 28 4.8.2. Configuración para el uso de los menús en base de datos.................................................................................... 29 4.9. INDICADOR DE CARGA ........................................................................................................................................... 31 4.10. API JAVASCRIPT ATLAS ...................................................................................................................................... 33 4.11. RECOMENDACIONES Y BUENAS PRÁCTICAS ................................................................................................ 34 4.12. EJEMPLO DE USO .................................................................................................................................................. 35 5. PREGUNTAS MÁS FRECUENTES ................................................................................................................................ 36 6. ENLACES RELACIONADOS .......................................................................................................................................... 37 3 de 37 Framework Atlas Componentes de Menu 1. INTRODUCCIÓN Este documento contiene el manual de uso de los componentes visuales de Menú del Framework Atlas. Actualmente se incluyen tres componentes claramente diferenciados, uno para el menú horizontal (en la parte superior de la página), otro para el menú vertical (en la zona izquierda de la página), y otro para el menú visual (en la zona central de la página, con imágenes para cada opción de menú). Dichos componentes pueden combinarse, de manera que sólo se muestre uno de ellos, dos, o incluso los tres. En este documento se incluye información sobre cómo utilizar dichos componentes en una aplicación Web, así como información acerca de la configuración de los parámetros fundamentales de estos componentes. 1.1. AUDIENCIA OBJETIVO Este documento está orientado a toda aquella persona que esté desarrollando una aplicación Web basada en el Framework Atlas y necesite utilizar los componentes de menús en su aplicación Web. 1.2. CONOCIMIENTOS PREVIOS Para un completo entendimiento del documento, el lector deberá tener conocimientos previos sobre las siguientes tecnologías: Java Server Faces (JSF) Facelets Spring Framework Hibernate Para saber más sobre dichas tecnologías, consultar el apartado de este documento, Enlaces Relacionados. 4 de 37 Framework Atlas Componentes de Menu 2. DESCRIPCIÓN Se dispone de tres componentes visuales, uno para el menú horizontal, otro para el vertical y otro para el visual. Estos componentes pueden combinarse en la pantalla, de manera que cuando se pulse sobre una opción de uno de los menús, se actualicen los otros con la nueva opción seleccionada. Para combinar varios menús en la misma página, estos recuperan de la request el id seleccionado y cambian su estado para actualizarse. El contenido del menú se define dinámicamente en un fichero de configuración XML que contiene todos los elementos de menú de la aplicación. A continuación se muestra un ejemplo de los menús horizontal, vertical y visual combinados en la misma pantalla: 3. INSTALACIÓN Y CONFIGURACIÓN En este apartado se incluye información sobre la instalación y la configuración de los componentes de Menú que vienen incluidos en el framework Atlas. 3.1. INSTALACIÓN Los componentes de menú ya vienen instalados en el arquetipo Web, incluidos en el módulo de componentes visuales. Por este motivo no es necesaria una instalación adicional si se parte del arquetipo. 3.2. CONFIGURACIÓN 5 de 37 Framework Atlas Componentes de Menu Para configurar los componentes de menú para poder ser utilizados es necesario seguir los pasos descritos a continuación: 3.2.1. Paso 1: Edición del fichero de opciones del menú El contenido del menú se obtiene dinámicamente de un fichero de configuración XML que contiene todos los elementos de menú de la aplicación. En el arquetipo de aplicaciones Web viene incluido este fichero, que se encuentra en la ruta src/main/resources/menu.xml del módulo web del arquetipo. El fichero contiene todos los elementos de menú de la aplicación, cada componente de menú (horizontal, vertical o visual) puede decidir qué grupo de estos elementos mostrará, a través de los atributos de la etiqueta que se describe en la sección de uso del componente. Un ejemplo de un fichero de menú XML es el siguiente: menu.xml <?xml version="1.0" encoding="UTF-8"?> <!-- edited with XMLSPY v2004 rel. 3 U (http://www.xmlspy.com) by ICM (Comunidad de Madrid) --> <menu xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="menu_aplicacion.xsd"> <elemento id="1" nombre="Home" nombre_navegacion="Inicio" url="/secure/index.jsf" perfil="ROLE_1"> </elemento> <elemento id="3" nombre="Menu1" nombre_navegacion="Menu1" url=""> <elemento id="3_1" nombre="Submenu1" nombre_navegacion="Submenu1" url="/secure/index.jsf"> </elemento> <elemento id="3_2" nombre="Submenu2" nombre_navegacion="Submenu2" url="/secure/index.jsf"> </elemento> </elemento> <elemento id="4" nombre="Información del usuario" nombre_navegacion="infoUsuario" url="/secure/infoUsuario.jsf"> </elemento> </menu> En la siguiente tabla se describe cada uno de los atributos de los elementos del menú: Nombre atributo Obligatorio Descripción id SI Identificador de la opción. En subopciones de menú, el id debe empezar por el id de la opción, seguido de un guión bajo y el id de la subopción. 6 de 37 Framework Atlas Componentes de Menu nombre SI Nombre a mostrar en el menú nombre_navegacion SI Nombre a mostrar en el rastro de migas url SI URL asociada a esa opción de menú. perfil NO Perfiles de usuario que pueden ver esa opción de menú (si son varios deben aparecer separados por punto y coma). 4. USO Una vez editado el fichero de definición del menú, puede procederse a su utilización. Para ello, en el arquetipo web se incluyen una serie de plantillas para todas las posibles combinaciones de menús (horizontal sólo, horizontal con vertical, etc.). Además de estas plantillas, existen tres componentes jsf que pueden utilizarse a través de etiquetas que incrustan el menú adecuado en la página. A continuación se describen los pasos necesarios para utilizar los menús, primero seleccionando la plantilla y luego incrustando las etiquetas adecuadas. 4.1. Paso 1: Selección de la Plantilla Para utilizar los menús, lo primero que hay que hacer es decidir cuál va a ser el layout o plantilla de nuestra página (cuáles de los tres menús disponibles se van a utilizar). Los ficheros de plantillas están en el arquetipo en el directorio src/main/webapp/WEB-INF/layout, y son los siguientes: 7 de 37 Framework Atlas Componentes de Menu - hc.xhtml: (Horizontal+Contenido). Incluye un menú horizontal, y en el resto de la página se muestra el contenido. Ejemplo: 8 de 37 Framework Atlas Componentes de Menu - hvc.xhtml: (Horizontal+Vertical+Contenido). Incluye un menú horizontal, uno vertical y en el resto de la página se muestra el contenido. Ejemplo: 9 de 37 Framework Atlas Componentes de Menu - hv.xhtml: (Horizontal+Visual). Incluye un menú horizontal, y en el resto de la página se muestra el menú visual. Ejemplo: 10 de 37 Framework Atlas Componentes de Menu - hvv.xhtml: (Horizontal+Vertical+Visual). Incluye un menú horizontal, menú vertical y en el resto de la página se muestra el menú visual. Ejemplo: 11 de 37 Framework Atlas Componentes de Menu - vc.xhtml: (Vertical + Contenido). Incluye un menú vertical, y en el resto de la página se muestra el contenido. Ejemplo: 12 de 37 Framework Atlas Componentes de Menu - vv.xhtml: (Vertical + Visual). Incluye un menú vertical, y en el resto de la página se muestra el menú visual. Ejemplo: 13 de 37 Framework Atlas Componentes de Menu - c.xhtml: (Contenido). No incluye menús, muestra directamente el contenido de la página en la zona central. Ejemplo: 4.2. Paso 3: Creación del fichero xhtml basado en la plantilla Una vez seleccionada la plantilla, debemos crear nuestro fichero xhtml que utilice dicha plantilla, y defina los componentes que se desean insertar en cada zona de la plantilla. En el arquetipo web vienen varios ejemplos de ficheros que utilizan las plantillas, por ejemplo en la página index.xhtml se utiliza la plantilla vc.xhtml (Menú Vertical + Contenido): index.html 14 de 37 Framework Atlas Componentes de Menu <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core" xmlns:t="http://myfaces.apache.org/tomahawk" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:atlas="http://atlas.core.componentes/jsf" xmlns:a4j="http://richfaces.org/a4j"> <ui:composition template="/WEB-INF/layout/vc.xhtml"> <ui:define name="titulo"> <ui:include src="/secure/titulo.xhtml" /> </ui:define> <ui:define name="rastroMigas"> <ui:include src="/rastroMigas/rastro.xhtml" /> </ui:define> <ui:define name="menuVertical"> <!-- Se hace referencia al fichero con el menú vertical --> <ui:include src="/menu/menu.xhtml" /> </ui:define> <ui:define name="content"> Aquí va el contenido… </ui:define> </ui:composition> </html> Este fichero xhtml tiene que contener las siguientes zonas: 1) Definición del espacio de nombres de etiquetas de Atlas Es necesario establecer la definición del espacio de nombres para las etiquetas de componentes de Atlas. Esto nos permitirá utilizar las etiquetas que incrustan los componentes de menú en la página. Un ejemplo de cabecera de fichero xhtml es la siguiente: Cabecera de fichero xhtml <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core" xmlns:t="http://myfaces.apache.org/tomahawk" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:atlas="http://atlas.core.componentes/jsf" xmlns:a4j="http://richfaces.org/a4j"> 15 de 37 Framework Atlas Componentes de Menu 2) Inclusión de la plantilla, y definición del contenido de cada zona En nuestro fichero xhtml es necesario incluir la plantilla a utilizar, así como definir los componentes que van a ir en cada una de las zonas. Por ejemplo, en la página principal del arquetipo web se incluye un menú vertical+contenido (plantilla vc.xhtml), donde la zona del menú vertical hace referencia a otro fichero (menu.xhtml), y el contenido se incluye tal cuál: Ejemplo.xhtml … <ui:composition template="/WEB-INF/layout/vc.xhtml"> <ui:define name="titulo"> <ui:include src="/secure/titulo.xhtml" /> </ui:define> <ui:define name="rastroMigas"> <ui:include src="/rastroMigas/rastro.xhtml" /> </ui:define> <ui:define name="menuVertical"> <!-- Se hace referencia al fichero con el menú vertical --> <ui:include src="/menu/menu.xhtml" /> </ui:define> <ui:define name="content"> Aquí va el contenido… </ui:define> </ui:composition> </html> Otro ejemplo para un menú horizontal, vertical y visual juntos sería el siguiente: Ejemplo.xhtml 16 de 37 Framework Atlas Componentes de Menu <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="es" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core" xmlns:a4j="http://richfaces.org/a4j" xmlns:rich="http://richfaces.org/rich" xmlns:c="http://java.sun.com/jstl/core"> <ui:composition template="/WEB-INF/layout/hvv.xhtml"> <ui:define name="titulo"> <ui:include src="/secure/titulo.xhtml" /> </ui:define> <ui:define name="menuHorizontal"> <ui:include src="/secure/menuHorizontal/menuHorizontalHeaderSample.xhtml"/> </ui:define> <ui:define name="rastroMigas"> <ui:include src="/rastroMigas/rastroMigasICM.xhtml"/> </ui:define> <ui:define name="menuVisual"> <ui:include src="/secure/menuVisual/menuVisualSample.xhtml"/> </ui:define> <ui:define name="menuVertical"> <ui:include src="/menu/menuICM.xhtml"/> </ui:define> </ui:composition> </html> En este fichero se hace referencia a otros xhtml en los que se definirá el contenido de cada una de las áreas de la plantilla. En algunas de ellas se deberá incluir cada uno de los tres componentes de menú, según se explica en el siguiente punto. Para ver con detalle las diferentes partes que se pueden incorporar a cada plantilla vea el apartado PERSONALIZACIÓN DE PLANTILLAS 4.3. Paso 3: Inserción de la etiqueta de Menú Horizontal Una vez definida nuestra plantilla y fichero xhtml, debemos de definir el contenido de cada una de las zonas. Concretamente, si estamos utilizando una plantilla con menú horizontal, se utiliza la etiqueta menuHorizontal. A continuación se muestra un ejemplo de cómo se inserta esta etiqueta dentro de una pagina XHTML: Ejemplo.xhtml 17 de 37 Framework Atlas Componentes de Menu <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="es" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core" xmlns:atlasc="http://atlas.core.componentes/jsf/composite"> <ui:composition> <f:loadBundle basename="msg/messages" var="bundle" /> <atlasc:menuHorizontal id="menu" menu="#{menuBean.menu}" /> </ui:composition> </html> En la siguiente tabla se muestra el significado de cada uno de los atributos de la etiqueta: 4.4. Nombre atributo Obligatorio Descripción menu SI Lista de los elementos de menu de tipo MenuItem height NO Altura del menú. Por defecto 26px mode NO Modo del menu. Por defecto “ajax” bundle NO Nombre del bundle del que se obtendrán las etiquetas styleClassTexto NO Estilos para el texto de los elementos de menú styleClassTextoAdicional NO Estilos para el texto adicional de cada elemento de menú Paso 4: Inserción de la etiqueta de Menú Vertical Si estamos utilizando una plantilla con menú vertical, se utiliza la etiqueta menuVertical. A continuación se muestra un ejemplo de cómo se inserta esta etiqueta dentro de una pagina XHTML: Ejemplo.xhtml 18 de 37 Framework Atlas Componentes de Menu <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="es" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core" xmlns:atlasc="http://atlas.core.componentes/jsf/composite"> <ui:composition> <div id="menu" class="menu_vert"> <atlasc:menuVertical id="idMenuVertical" menu="#{menuBean.menu}"/> </div> </ui:composition> </html> Este componente sirve para mostrar un conjunto de elementos de menú provenientes del menuBean. Tiene estructura jerárquica de árbol, con lo que se puede incluir distintos nodos que aparecerán agrupados por niveles. En la siguiente tabla se muesta el significado de cada uno de los atributos de la etiqueta: Nombre atributo Obligatorio Tipo Descripción id NO String Identificador del componente menu SI java.util.List Clave del fichero de pares clavevalor application.properties para identificar el fichero de menú cuyos elementos serán presentados por el componente de menú. Indica si la validación del immediate NO Boolean componente debe adelantarse a la fase 'Apply Request Values' o no. Valor por defecto false rendered 4.5. NO Boolean Valor true|false para seleccionar si este componente se va a mostrar. Por defecto es true Paso 5: Inserción de la etiqueta de Menú Visual Si estamos utilizando una plantilla con menú visual, se utiliza la etiqueta menuVisual. Este componente sirve para mostrar un conjunto de elementos de menú estructurado mediante una tabla. Se apoya en el componente de RichFaces dataGrid. 19 de 37 Framework Atlas Componentes de Menu Muestra opciones en 2 niveles, el primer nivel con imagen y el segundo nivel como una lista de enlaces dentro de las de primer nivel. El aspecto del componente es el siguiente: Figura Menú visual Y a continuación se muestra un ejemplo del componente con opciones de segundo nivel: 20 de 37 Framework Atlas Componentes de Menu Figura Menú visual 2 A continuación se muestra un ejemplo de cómo se inserta esta etiqueta dentro de una pagina XHTML: Ejemplo.xhtml <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="es" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core" xmlns:c="http://java.sun.com/jstl/core" xmlns:fn="http://java.sun.com/jsp/jstl/functions" xmlns:a4j="http://richfaces.org/a4j" xmlns:rich="http://richfaces.org/rich" xmlns:atlasc="http://atlas.core.componentes/jsf/composite"> <ui:composition> <f:loadBundle basename="msg/messages" var="bundle" /> <h:form id="provinciasFormBean"> <atlasc:menuVisual id="indexVisual" menu="#{menuBean.menu}" columns="3" width="250" /> </h:form> </ui:composition> </html> 21 de 37 Framework Atlas Componentes de Menu En la siguiente tabla se muesta el significado de cada uno de los atributos de la etiqueta: Nombre atributo Obligatorio Descripción id SI Identificador del componente menu SI EL ( Expression Language) que indica la lista de opciones del menú, debe ser una lista de objetos atlas.componentes.menu.MenuItem. columns NO Establece el número de columnas que se quiere establecer en la tabla principal del menú visual. El valor por defecto para este valor es 3 idInicial NO Identificador de la opción de menú que se quiera establecer como inicial. Si se quiere establecer una opción que no sea de primer nivel, se deben concatenar los id’s con guión bajo, Ej: 1_2. primerNivel NO Valor true|false, si es true siempre se mostrará el primer nivel del menú, en este caso no tendría efecto el parámetro idInicial. width NO Ancho de las columnas. Su valor por defecto es 250. bundle NO Nombre del bundle del que se obtendrán las etiquetas. Su valor por defecto es bundle. rendered NO Valor true|false para seleccionar si este componente se va a mostrar. Por defecto es true styleClass NO Estilo para el componente. Su valor por defecto es tablaMenuVisual. styleClassTexto NO Estilo para el texto de los enlaces. Su valor por defecto es enlace. styleClassTextoAdicional NO Estilo para el texto adicional de los enlaces (si lo hay). Su valor por defecto es enlace. tituloClass NO Estilo del título para cada celda del menú. Su valor por defecto es legend. txtelementoClass NO Estilo para el texto de la descripcion de cada celda del menú. Su valor por defecto es label. 22 de 37 Framework Atlas Componentes de Menu imagenClass NO Estilo para la imagen de las opciones de primer nivel. 23 de 37 Framework Atlas Componentes de Menu 4.6. PERSONALIZACIÓN DE PLANTILLAS Los diferentes layouts están realizados con la tecnología Facelet la cual permite, a través de un sistema de plantillas, la personalización de ciertas partes de las páginas. Para definir el contenido que se quiere incorporar en una plantilla hay que utilizar la etiqueta <ui:define> indicando, en el atributo name, el mismo valor que el de la etiqueta de definición <ui:insert> que se quiere rellenar. Para ver los diferentes <ui:insert> que existen en las diferentes plantillas se recomienda ver el xhtml de los layout (carpeta \web\src\main\webapp\WEB-INF\layout). A continuación se muestra, de nuevo, el ejemplo del index.xhtml que viene incorporado en el arquetipo web: index.html <!-- … --> <ui:composition template="/WEB-INF/layout/vc.xhtml"> <ui:define name="titulo"> <h:outputText styleClass="tituloPagina" value="Titulo"/> <h:outputText styleClass="subtituloPagina" value="Subtitulo"/> </ui:define> <ui:define name="rastroMigas"> <ui:include src="/rastroMigas/rastro.xhtml" /> </ui:define> <ui:define name="menuVertical"> <ui:include src="/menu/menuVertical.xhtml" /> </ui:define> <ui:define name="content"> <!-- … --> </ui:define> </ui:composition> <!-- … --> Como se puede apreciar, en esa página se ha definido el contenido de las partes título, rastroMigas, menuVertical y content. Dependiendo de la plantilla que se esté utilizando habrá que definir algunos contenido u otros. Lista completa de contenidos personalizables: Nombre Plantilla Descripción headerInsert c,errorLayout, hc, hv, Contenido que será insertado en el hvc, hvv, loginLayout, vc, <h:head> de la aplicación vv cabeceraCentral c,errorLayout, hc, hv, Contenido que será insertado en la parte hvc, hvv, loginLayout, vc, central de la cabecera de la aplicación. vv Por defecto no se inserta nada. La clase CSS .cabeceraCentral define el estilo del div que lo contiene. 24 de 37 Framework Atlas Componentes de Menu rastroMigas c, hc, hv, hvc, hvv, vc, vv Contenido que será insertado en la zona reservada para el rastro de migas panelAyuda c, hc, hv, hvc, hvv, vc, vv Contenido que será insertado en la zona reservada para el panel de ayuda titulo c, hc, hv, hvc, hvv, vc, vv Contenido que será insertado en la zona reservada para el título content c,errorLayout, hc, loginLayout, vc hvc, Contenido que será insertado en la zona reservada para la parte principal de la aplicación footer c,errorLayout, hc, hvc, hvv, vc, vv hv, Contenido que será insertado en la zona reservada para el footer menuHorizontal hc, hv, hvc, hvv Contenido que será insertado en la zona reservada para el menú horizontal menuVertical hvc, hvv, vc, vv Contenido que será insertado en la zona reservada para el menú vertical menuVisual hv, hvv, vv Contenido que será insertado en la zona reservada para el menú visual 25 de 37 Framework Atlas Componentes de Menu 4.7. USO DE MENÚS PERSONALIZADOS POR USUARIO A partir de la versión 1.2.5 de ATLAS, es posible modificar el menú que se muestra a cada usuario, personalizándolo. Nota: Para usar esta funcionalidad es necesaria la autorización explícita por parte de ICM. Para personalizar el menú de un usuario, se puede utilizar la clase atlas.componentes.utiles.AtlasMenuUtils. A continuación se muestran los métodos de dicha clase, que pueden utilizarse para establecer el menú personalizado de un usuario, u obtener el menú por defecto de la aplicación: atlas.componentes.utiles.AtlasMenuUtils import atlas.componentes.jaxb.menuaplicacion.Menu; /** * Establece un menú personalizado para un usuario * @param menu El menú para el usuario. Null para utilizar el menú por defecto */ public static void setCustomMenu(Menu menu); /** * Obtiene el menú personalizado de un usuario, o null si no tiene menú personalizado * @return El menú personalizado de un usuario, o null si no tiene menú personalizado */ public static Menu getCustomMenu(); /** * Obtiene un menú * @param menuCode defecto) * @return El menú */ public static Menu por defecto de la aplicación codigo del menu (si null, entonces menu por por defecto de la aplicación getMenu(String menuCode) throws ServiceException; /** * Establece el menú por defecto de la aplicación * @param menuCode codigo del menu (si null, entonces menu por defecto) * @param menu * @throws ServiceException */ public static void setMenu(String menuCode, Menu menu) throws ServiceException; 26 de 37 Framework Atlas Componentes de Menu A continuación se muestra un ejemplo de personalización el menú para el usuario actualmente autenticado. El ejemplo obtiene el menú por defecto (definido en el fichero menu.xml), y le añade algunas opciones al final: Ejemplo de menú personalizado import import import import atlas.componentes.jaxb.menuaplicacion.CeldaMenuType; atlas.componentes.jaxb.menuaplicacion.ElementoType; atlas.componentes.jaxb.menuaplicacion.Menu; atlas.componentes.utiles.AtlasMenuUtils; … // Establece menu personalizado, incluye una nueva opcion en el menu actual Menu menu = AtlasMenuUtils.getMenu(null); /*****************************************/ /*************** 1 ***********************/ ElementoType elemento1 = new ElementoType(); elemento1.setId("1"); elemento1.setPerfil("ROLE_1"); elemento1.setUrl("/secure/menusApp/indexGeneral.jsf"); elemento1.setNombreNavegacion("Look and Feel"); elemento1.setNoUrl(false); elemento1.setNombre("Maquetación"); CeldaMenuType celdaMenuType1 = new CeldaMenuType(); celdaMenuType1.setUrlImagen("img/componentes/estilos.jpg"); celdaMenuType1.setApartado("Maquetación"); celdaMenuType1.setUrlApartado("/secure/menusApp/indexGeneral.jsf"); celdaMenuType1.setTexto("Ejemplos de estilos e iconos disponibles"); elemento1.setCeldaMenu(celdaMenuType1); /*****************************************/ /*************** 1_1 *********************/ ElementoType elemento11 = new ElementoType(); elemento11.setId("1_1"); elemento11.setPerfil("ROLE_1"); elemento11.setUrl("/secure/estilos/estilosOption.jsf"); elemento11.setNombreNavegacion("Estilos"); elemento11.setNoUrl(false); elemento11.setNombre("Estilos"); CeldaMenuType celdaMenuType11 = new CeldaMenuType(); celdaMenuType11.setUrlImagen("img/componentes/estilos.jpg"); celdaMenuType11.setApartado("Estilos"); celdaMenuType11.setUrlApartado("/secure/estilos/estilosOption.jsf"); celdaMenuType11.setTexto("Pagina de ejemplo con estilos del framework"); elemento11.setCeldaMenu(celdaMenuType11); elemento1.getElemento().add(elemento11); menu.getElemento().add(elemento1); AtlasMenuUtils.setCustomMenu(menu); 27 de 37 Framework Atlas Componentes de Menu 4.8. USO DE MENU’S OBTENIDOS DE BASE DE DATOS Se pueden configurar los menú para que en vez de leerse del fichero XML de menú se lean de base de datos y además sean distintos por roles, e incluso por usuario. 4.8.1. Crear el menú en base de datos Los elementos de menu y los roles habrá que darlos de alta en BBDD en las tabla MENU_ELEMENT y MENU_ELEMENT_ROL del esquema DBA_GAT La tabla MENU_ELEMENT contendrá los elementos de menu y su relación padre/hijo entre ellos La tabla MENU_ELEMENT_ROL contendrá que elementos de menu puede ver cada rol 4.8.1.1. Descripción de los campos de las tablas del Menu. GAT_MENU_ELEMENT Campo Descripción ID_MENU_ELEMENT PK de la tabla. ID_MENU_PADRE Identificador del menú padre. CD_APLICACION Código de la aplicación que usa el menú, el mismo valor que se define en el application.properties. DS_TEXTO Valor texto que se muestra en el menú. DS_ETIQUETA Etiqueta que se lee del resource bundle, si se ingresa este valor entonces el campo DS_TEXTO es ignorado. DS_URL URL que se invoca al hacer click. NM_ACTIVO Si el elemento del menú se encuentra activo. 28 de 37 Framework Atlas Componentes de Menu NM_ORDEN Número de orden en el cual aparece el menú. NM_POPUP Si al hacer click la url(DS_URL) se abre en modo popup. IMAGEN Valor de la imagen que se muestra cuando el menú es tipo de visual. ICONO Icono que se muestra al lado del texto del elemento del menú. DS_ETIQUETA_DETALLE Valor que se muestra cuando el menú es tipo de visual. DS_TEXTO_DETALLE Valor que se muestra cuando el menú es tipo de visual. NM_DESTACADO Valores 0 y 1 (Estableces a 0 el valor por defecto); si el valor es 1 entonces el elemento del menú aparecerá destacado sobre el resto. Esta funcionalidad es solo para el menú de tipo visual. GAT_MENU_ELEMENT_ROL 4.8.2. Campo Descripción ID_MENU_ELEMENT_ROL PK de la Tabla DS_ROL Descripción del Rol ID_MENU_ELEMENT FK correspondiente a la PK de la tabla GAT_MENU_ELEMENT NM_DESTACADO Destacado por Rol Configuración para el uso de los menús en base de datos Modificar el applicattionContext-database que se escaneen las entidades de bbdd para menús applicationContext-database.xml <property name="packagesToScan"> <list> <!-- Necesario si se quiere utilizar el componente de calendario -> <value>atlas.componentes.domain</value> <value>atlas.core.seguridad.domain</value> <value>atlas.componentes.menu.domain</value> … … </list> </property> 29 de 37 Framework Atlas Componentes de Menu Modificar el provider interno del cacheProvider definiendolo como atlasDabaseMenuProvider y poner las opciones de cacheo y el tiempo de cacheo (en segundos) applicationContext-services.xml <bean id="cacheMenuProvider" class="atlas.componentes.menu.impl.CacheMenuProvider"> <constructor-arg ref="atlasDatabaseMenuProvider" /> <property name="cachearPorUsuario" value="true" /> <property name="cachearPorRoles" value="true" /> <property name="tiempoCache" value="86400" /> </bean> <bean id="menuManager" class="atlas.componentes.menu.MenuManager" p:provider-ref="cacheMenuProvider" /> Añadir al applicattion.properties la variable menu.aplicacion que será el código de aplicación y que es el que hay que meter en todos los registros de nuestro menú en la tabla GAT_MENU_ELEMENT application.properties # Configuracion para el menu de la aplicación en BBDD menu.aplicacion=EJPL Una vez hechos estos cambios al ejecutar la aplicación el menú se cargará desde la definición del mismo en base de datos. 30 de 37 Framework Atlas Componentes de Menu 4.9. INDICADOR DE CARGA Al utilizar cualquiera de las plantillas se cargará, por defecto, la librería JavaScript de atlas (/webapp/resources/js/atlas.js). Este script activa un indicador de carga tanto para las peticiones HTTP como para las Ajax. A continuación se muestra el aspecto del indicador de carga en funcionamiento: Para configurar el indicador de carga se proporciona el siguiente API JavaScript: Nombre Descripción atlas.ui.BusyIndicator.show Muestra el indicador de carga atlas.ui.BusyIndicator.hide Esconde el indicador de carga atlas.ui.BusyIndicator.disable Deshabilita el indicador de carga 31 de 37 Framework Atlas Componentes de Menu atlas.ui.BusyIndicator.enable Habilita el indicador de carga atlas.ui.BusyIndicator.options(options) Establece las opciones del indicador de carga. Opciones disponible: enable: true/false. Indica si el componente está activo o no nonAjax: true/false. Indica si hay que mostrar el indicador de carga para las peticiones HTTP (no ajax) ajax: true/false. Indica si hay que mostrar el indicador de carga en las peticiones ajax. A continuación mostramos ejemplos de uso de interés del API descrito. 1. Desactivar el indicador de carga: disableBusyIndicatorSample.xhtml <h:outputScript target="head"> jQuery(document).ready(function() { atlas.ui.BusyIndicator.disable(); }); </h:outputScript> 2. Desactivar el indicador de carga para las llamadas Ajax: disableAjaxBusyIndicator.xhtml <h:outputScript target="head"> jQuery(document).ready(function() { atlas.ui.BusyIndicator.options({ajax:false}); }); </h:outputScript> 3. Mostrar el indicador de carga al hacer click en un elemento: onclickBusyIndicator.xhtml … <h:outputScript target="head"> jQuery(document).ready(function() { atlas.$('calendarioForm:enviarResultado').click(atlas.ui.BusyIndicator.show); }); </h:outputScript> <h:form id="calendarioForm"> … <h:commandLink action="#{calendarioSampleBean.enviarDatos}" id="enviarResultado" value="#{bundle['c.boton']}"> <h:graphicImage value="/img/ico_nuevo.gif"/> </h:commandLink> … </h:form> … 32 de 37 Framework Atlas Componentes de Menu 4.10. API JAVASCRIPT ATLAS Como se ha indicado en el punto anterior, al utilizar cualquiera de las plantillas se dispondrá del API JavaScript de Atlas. Esta librería, que se encuentra en webapp/resources/js/atlas.js, se ha creado para recopilar métodos útiles para las aplicaciones web creadas con Atlas (arquetipos web, gstaweb y documentumweb). A continuación se detallan los métodos disponibles: Nombre Descripción Dado un elemento DOM cuyo id es del tipo JSF, ccid (component client atlas.jQuery id), devuelve su objeto jQuery atlas.$ Alias para atlas.jQuery atlas.ui.showBusyIndicator Muestra el indicador de carga atlas.ui.hideBusyIndicator Esconde el indicador de carga atlas.ui.BusyIndicator Dentro de este objeto se encuentran los métodos de ayuda para el indicador de carga. Ver apartado anterior. 33 de 37 Framework Atlas Componentes de Menu 4.11. RECOMENDACIONES Y BUENAS PRÁCTICAS Se debe de validar el XML de menú contra su esquema: menu_aplicacion.xsd, que es el esquema de menús existente en ICM, en su versión que admite elementos del tipo celda-menu. Estos elementos están diseñados para soportar componentes del tipo Menú Visual. 34 de 37 Framework Atlas Componentes de Menu 4.12. EJEMPLO DE USO Se puede ver un ejemplo de los componentes de menú en la aplicación de demostración de componentes, bajo la siguiente secuencia de navegación: Inicio > Menú > Menú Horizontal / Vertical / …. 35 de 37 Framework Atlas Componentes de Menu 5. PREGUNTAS MÁS FRECUENTES Pregunta: ¿Dónde puedo encontrar información general sobre los componentes? Respuesta: En la aplicación de demostración de los componentes del Framework Atlas Pregunta: ¿Qué interacción un componente de menú con el resto de elementos de Menú? Respuesta: Puesto que los enlaces que construye este componente tienen un parámetro id con el valor del elemento de menú correspondiente, cualquier otro componente de menú comprueba, cuando se produce una petición, este parámetro en el objeto Request y su valor. Entonces, determina cuál es la opción que se ha elegido y se proceden a representar con el elemento de menú seleccionado como destacado. Pregunta: ¿Cómo se ha implementado el componente en su capa de presentación? Respuesta: Mediante un componente de Facelets. Los mensajes de error se extraen del contexto de Faces. Pregunta: ¿Cómo puedo modificar los estilos del componente? Respuesta: Mediante los atributos de estilo del componente. Para más información consultar la tabla de atributos en la sección de Uso del componente. 36 de 37 Framework Atlas Componentes de Menu 6. ENLACES RELACIONADOS Producto URL Ajax4JSF http://www.jboss.org/jbossrichfaces/ Barbecue http://barbecue.sourceforge.net/ Commons BeanUtils commons.apache.org/beanutils/ Commons Configurations http://commons.apache.org/configuration/ Facelets https://facelets.dev.java.net/ Hibernate http://www.hibernate.org/ Hibernate Annotations http://www.hibernate.org/hib_docs/annotations/reference/en/html_single/ JAXB http://java.sun.com/webservices/jaxb/ Jcaptcha jcaptcha.sourceforge.net/ JPA http://java.sun.com/developer/technicalArticles/J2EE/jpa/ JSF http://java.sun.com/javaee/javaserverfaces/ JSFUnit http://www.jboss.org/jsfunit/ Log4J http://logging.apache.org/log4j/ MyFaces Core http://myfaces.apache.org/ RichFaces http://www.jboss.org/jbossrichfaces/ Spring http://www.springframework.org/ Spring Security http://www.springframework.org/ Tomahawk http://myfaces.apache.org/tomahawk/ Velocity http://velocity.apache.org/ 37 de 37