1 / 12

OGNL

OGNL. CURSO STRUTS 2. En el siguiente apartado del curso se describe el motor de expresiones regulares OGNL así como sus funciones de transferencia de datos entre Modelo-Vista, y viceversa. Además se narrará el objeto de Struts 2, Value Stack, analizando su estructura.

tom
Download Presentation

OGNL

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. OGNL CURSO STRUTS 2 • En el siguiente apartado del curso se describe el motor de expresiones regulares OGNL así como sus funciones de transferencia de datos entre Modelo-Vista, y viceversa. Además se narrará el objeto de Struts 2, Value Stack, analizando su estructura. • La información que se estudiará en este apartado es: • ¿Qué es OGNL? • Value Stack • Acceso a Atributos y Métodos con OGNL • Acceso a Arrays con OGNL • Acceso a List con OGNL • Acceso a Maps con OGNL • JSP Expression Language

  2. OGNL CURSO STRUTS 2 • ¿QUÉ ES OGNL? • Carácterísticas • OGNL es originario del framework WebWork y tiene las siguientes características. • Enlaza los campos de un formulario Web (input, checkbox, textare,…) con su correspondiente Objeto en el Action, realizando además la conversión de tipos. • Completa tags genéricos con los objetos del Modelo. • Crea Collections y Maps en tiempo de ejecución para usar en la Vista. • Permite invocar a métodos de los objetos del Modelo, no solo métodos “get” y “set”. OGNL (Object-Graph Navigation Language) es un componente de Struts 2 que permite acceder a los atributos de los Actions y parámetros en la Vista.

  3. OGNL CURSO STRUTS 2 ¿QUÉ ES OGNL? OGNL es una herramienta muy potente que proporciona Struts 2 a los desarrolladores para permitir el acceso a los datos del Modelo desde la Vista, y viceversa. Expression Language Convertidor Tipos Expression Language OGNL dispone de un sistema de Expression Language propio que permite acceder a números objetos que se encuentran en distintos contextos, además de ser un lenguaje muy sencillo que facilita el aprendizaje del mismo. <s:property value=”nombre”/> <s:property value=”usuario.nombre”/> <s:property value=”#session.usuario”/> <s:property value=”paises[1]”/> OGNL dispone también de una sintaxis propia para obligar a utilizar una expresión OGNL %{expression}, en ciertas situaciones es necesario. <s:property value=”%{nombre}”/> <s:property value=”%{usuario.nombre}”/> <s:property value=”%{#session.usuario}”/> <s:property value=”%{paises[1]}”/> Convertidor Tipos OGNL realiza la conversión de tipos de los objetos Java de los Action a los valores String de los formularios Web, y viceversa, de manera transparente, no es necesario configurar ninguna propiedad de OGNL para que se encargue de las conversiones. OGNL está configurado para realizar la conversión de tipos de ciertas clases de Objetos: BigInteger, BigDecimal, boolean, char, Integer, Float, Long, Double, Date y String. Pero Struts 2, permite implementar los propios convertidores de tipos.

  4. OGNL Value Stack Object Stack Context Map Objeto 1 parametersrequestsessionapplicationattr Objeto 2 Objeto 1 CURSO STRUTS 2 VALUE STACK Cada vez que realiza una petición se crea el Objeto ValueStack, el cual es usado para almacenar el propio Action y otros objetos. El Value Stack es accedido durante el proceso por Interceptors, y por la Vista para mostrar la información que contiene. Estructura del objeto Value Stack: ¿Cómo diferencia OGNL el acceso a los datos del Object Stack de los datos del Context Map? • ContextMap • Las estructuras Map que el framework guarda en el ContextMap dentro del ValueStack son: • parameter, un Map que contiene los parámetros de la petición actual. • request, un Map que contiene todos los atributos del objeto HttpServletRequest de la petición. • session, un Map que contiene todos los atributos del objeto HttpSession del usuario. • application, un Map que contiene todos los atributos del objeto ServletContext de la aplicación. • attr, un Map que buscar los atributos en los distintos contextos, en el siguiente orden de contexto: page, request, session y application. Object Stack Struts 2 almacena el Action y los Objetos en la Object Stack, además de guardar varias estructura java.util.Map en el ContextMap. ¿Cómo diferencia OGNL el acceso a los datos del Object Stack de los datos del ContextMap? Es posible indicar al motor de OGNL donde buscar, se utiliza el prefijo # si se intenta acceder al ContextMap, sin el prefijo indicado se utilizará el Object Stack. //acceso OGNL a objetos del Object Stack <s:property value=”object1.propiedad”/> <s:property value=”object2.propiedad”/> //acceso OGNL a Maps del ContextMap <s:property value=”#parameters.campo1[0]”/> <s:property value=”#parameters.campo1[1]”/> <s:property value=”#parameters.campo2[0]”/> NOTA: Un parámetro request siempre devolverá un array de Strings, no un objeto String. Para acceder al objeto es necesario indicarlo mediante índice [0] (#parameters.campo1[0]).

  5. OGNL CURSO STRUTS 2 • VALUE STACK • Acceso a los datos del Object Stack • El motor OGNL permite acceder a las propiedades de los objetos que se encuentren en el Object Stack de distintas formas: • Lectura de una propiedad mediante nombre • Lectura de una propiedad mediante índice Para acceder a una propiedad de un Objeto del Object Stack hay que seguir cualquiera de las siguientes formas, las tres son equivalentes: <s:property value=”object.propiedad”/> <s:property value=”object['propiedad']”/> <s:property value=”object["propiedad"]”/> Los objetos del Object Stack pueden leerse también mediante índice, comenzando en el cero. Es decir, si leemos el índice [0] estaremos invocando al primer objeto de la pila de objetos del Object Stack, el [1] será el segundo objeto, y así sucesivamente. <s:property value=”[0].propiedad”/> // <s:property value=”[0].[‘propiedad’]”/> // primer objeto del Object Stack <s:property value=”[0].[“propiedad”]”/> // <s:property value=”[1].propiedad”/> // <s:property value=”[1].[‘propiedad’]”/> // segundo objeto del Object Stack <s:property value=”[1].[“propiedad”]”/> // . . . Una característica importante del motor OGNL, es que si el objeto especificado mediante índice no tiene la propiedad invocada, buscará en los siguientes objetos del Object Stack hasta encontrar un objeto que implemente la propiedad solicitada. //busca un Objeto en todo el Object Stack que contenga el atributo “password” <s:property value=”[0].password”/> <s:property value=”password”/> //esta expresión es igual que la anterior Si la propiedad que invocamos del objeto contiene atributos, pueden accederse de la misma manera. <s:property value=”[0].propiedad”/> <s:property value=”[0].[‘propiedadObject’].[‘propiedad’]”/> <s:property value=”[0].[“propiedadObject”].[“propiedad”]”/>

  6. OGNL CURSO STRUTS 2 • VALUE STACK • Acceso a los datos del Context Map • Para acceder a las propiedades de las estructuras Map del Context Map hay que definir de que contexto obtener la propiedad su como el nombre. • Buscar la propiedad en el objeto parameter (PageContext) • <s:property value=”#parameter.propiedad”/> • Buscar la propiedad en el objeto request (HttpServletRequest) • <s:property value=”#request.propiedad”/> • Buscar la propiedad en el objeto session (HttpSession) • <s:property value=”#session.[‘propiedad’]”/> • Buscar la propiedad en el objeto application (ServletContext) • <s:property value=”#application.[“propiedad”]”/> • Busca el valor de la propiedad en todos los contextos, siguiente el siguiente orden: page, request, session y application. • <s:property value=”#attr.[‘propiedad’]”/>

  7. OGNL CURSO STRUTS 2 • ACCESO A ATRIBUTOS Y MÉTODOS CON OGNL • OGNL permite invocar a atributos y métodos estáticos de cualquier clase Java accesible que se encuentre en el classpath de la aplicación, no es necesario que el Objeto se encuentre en el Value Stack, aunque también se puede invocar a los atributos y métodos estáticos de los Objetos del Value Stack. • Invocación a Atributos y Métodos Estáticos • Para invocar a un atributo estático o un método estático, hay que utilizar la siguiente sintaxis: • @rutaCompletaClase@atributoEstaticoPublico • @rutaCompletaClase@metodoEstaticoPublico(argumentos) • Invocación a Atributos y Métodos de los Objetos del Value Stack • OGNL también permite invocar a atributos y método de clases instanciadas que se encuentren en el Object Stack del Value Stack, la sintaxis para realizarlo es: • object.atributo • object.metodo(argumentos) Ejemplo <s:property value=”@java.util.Calendar@DECEMBER”/> <s:property value=”@com.opensymphony.xwork2.Action@SUCCESS”/> Ejemplo <s:property value=”@ejemplo.capitulo2.Util@now()”/> <s:property value=”@org.apache.commons.io.FileUtils@readFileToString(file)”/> Ejemplo <s:property value=”objeto.atributo”/> <s:property value=”[0].atributo”/> Ejemplo <s:property value=”objeto.metodo(argumento)”/> <s:property value=”[0].metodo(argumento)”/>

  8. OGNL CURSO STRUTS 2 • ACCESO A ARRAYS CON OGNL • Mediante OGNL se puede trabajar con atributos de tipo Array sin ningún problema, trabajando con ellos de forma normal a cualquier otro atributo. • Sintaxis • Invocamos al array completo • atributo.array • Invocamos a un elemento del array en concreto • atributo.array[1] • Invocamos a la función length de un array • atributo.array.length • EJEMPLO Ejemplo El siguiente método “getPaises()”, se encuentra dentro de un Action. public String[] getPaises() { return new String[] {"España", "Portugal", "Francia", "Andorra"}; } Para trabajar con los elementos del array se utiliza la misma nomenclatura que si fuese una clase Java, además también se pueden acceder al campo “length” del array. <s:property value=”paises[0]”/> <s:property value=”paises[3]”/> <s:property value=”paises.length”/>

  9. OGNL CURSO STRUTS 2 • ACCESO A LIST CON OGNL • OGNL permite trabajar con objetos de tipo java.util.Collection y sus subclases (List, ArrayList, Set). • Sintaxis • Invocamos a la lista completa • atributo.list • Invocamos a un elemento de la lista en concreto • atributo.list[3] • Invocamos a la función isEmpty de una colección • atributo.list.isEmpty • Por defecto si no se indica elemento alguno en la lista se devuelve los valores String (toString()) de cada uno de los objetos de la lista, separado por comas. • Creación Listas con OGNL • OGNL permite crear listas, la sintaxis para implementarlo es misma notación para declarar un array en una clase Java. publicCollection<String> getPaises() { Collection<String> paises = new ArrayList<String>(); paises.add("España"); paises.add("Portugal"); paises.add("Francia"); paises.add("Andorra"); returnpaises; } Si solicitamos la lista completa de países obtendremos: <s:property value=”paises”/> //= [España, Portugal, Francia, Andorra] Para acceder un objeto en concreto de la lista se utiliza la misma notación que para un array: <s:property value=”paises[0]”/> <s:property value=”paises[3]”/> <s:property value=”paises.isEmpty”/> <s:property value=”paises.isEmpty()”/> <s:property value=”{“España”, “Portugal”, “Francia”, “Andorra”}”/> <s:property value=”{“España”, “Portugal”, “Francia”, “Andorra”}[0] ”/> //= España <s:property value=”{0, 1, 2, 3}”/> <s:property value=”{2.5d, 3.5d}”/>

  10. OGNL CURSO STRUTS 2 publicMap<String, String> getPaises() { Map<String, String> paises = new HashMap<String, String>(); paises.put("ES", "España"); paises.put("PT", "Portugal"); paises.put("FR", "Francia"); returnpaises; } Para acceder a los atributos y métodos del Map de los países, la sintaxis sería: <s:property value=”paises[“ES”]”/> <s:property value=”paises[‘PT’]”/> <s:property value=”paises.size”/> <s:property value=”paises.size()”/> <s:property value=”paises.isEmpty”/> <s:property value=”paises.isEmpty”/> También podemos trabajar con los Maps que se encuentra en ContextMap del ValueStack, para acceder a ellos hay utilizar el prefijo #. <s:property value=”#application[“info”]”/> <s:property value=”#session[‘usuario’]”/> • ACCESO A MAPS CON OGNL • OGNL permite trabajar con Maps, permitiendo acceder a los valores indicando la clave, o los métodos del java.util.Map. • Sintaxis • Invocamos al Set completo de claves • atributo.map.keys • Invocamos a un elemento concreto del Map buscándolo por su clave • atributo.map[key] • Invocamos a la función size() de una colección • atributo.map.size() • Invocamos al Map del objeto request para obtener un parámetro • request[“key”] • Creación Maps con OGNL • OGNL permite crear estructura Map, para ello utiliza la siguiente sintaxis: • #{ clave1:valor1, clave2:valor2, clave3, valor3,…, claveN:valorN} <s:property value=”#{“ES”:”España”, “PT”:”Portugal”, “FR”:”Francia”}”/> <s:property value=”#{“ES”:”España”, “PT”:”Portugal”, “FR”:”Francia”}[‘ES’]”/>

  11. OGNL CURSO STRUTS 2 JSP EXPRESSON LANGUAGE Hay algunas situaciones en las que OGNL ni las tags de Struts 2 puede solucionarnos algún problema que se presenta para obtener los datos en la Vista, en estas situaciones será necesario utilizar el Expression Language (EL) de JSP. HTTP Header y Cookies Simplificar Código Mediante EL podemos acceder a las variable de la cabecea HTTP (header) o las cookies, mientras que con OGNL no es posible: Por ejemplo: ${header.host} ${cookie.hash} En ciertas situaciones resulta más engorroso utilizar tags de Struts 2 que utilizar expresiones EL de JSP. Por ejemplos, las siguientes expresiones son equivalentes: <s:property value=”serverValue”/> ${serverValue}

  12. ¿Qué es OGNL? • OGNL (Object-Graph Navigation Language) es un componente de Struts 2 que permite acceder a los atributos de los Actions y parámetros en la Vista. • Carácterísticas • Enlaza los campos de un formulario Web (input, checkbox, textare,…) con su correspondiente Objeto en el Action, realizando además la conversión de tipos. • Completa tags genéricos con los objetos del Modelo. • Crea Collections y Maps en tiempo de ejecución para usar en la Vista. • Permite invocar a métodos de los objetos del Modelo, no solo métodos “get” y “set”. • Sintaxis %{} • <s:property value=”%{nombre}”/> • <s:property value=”%{usuario.nombre}”/> • <s:property value=”%{#session.usuario}”/> • <s:property value=”%{paises[1]}”/> OGNL Value Stack Object Stack Context Map Objeto 1 parametersrequestsessionapplicationattr Objeto 2 Objeto 1 CURSO STRUTS 2 RECUERDA QUE… Una vez completado el apartado es importante aprender los siguientes puntos relativos a lo estudiado: • ValueStack • Estructura compleja interna de Struts 2 para almacenar toda la información: peticiones, variables, session, atributos,... Sus valores son refrescados en cada petición. • Estructura del objeto: • Object Stack, almacena el Action, sus atributos y el ContextMap. • ContextMap, almacena los siguientes valores: parameter, request, session y application. • ¿Cómo diferencia OGNL el acceso a los datos del Object Stack de los datos del ContextMap? • Se utiliza el prefijo # si se intenta acceder al ContextMap, sin el prefijo indicado se utilizará el Object Stack. • //acceso OGNL a objetos del Object Stack • <s:property value=”object1.propiedad”/> • //acceso OGNL a Maps del ContextMap • <s:property value=”#parameters.campo1[0]”/> OGNL VALUESTACK

More Related