Saltar a contenido

5. Contextos

El framework utiliza un sistema de "contextos" para acceder de forma uniforme a la información procedente de diferentes fuentes (base de datos, ficheros, apis REST, información del dispositivo, etc...) y soporta binding automático entre las entidades recuperadas del repositorio y los componetes de pantalla, de forma similar a lo que se puede encontrar en otros framework como Angular, JSF, etc.

El mecanismo de refresco entre componentes se basa en un mecanismo reactivo, implementado a partir de las dependencias entre componentes de la pantalla o entre componentes y contextos.

Existe un contexto global en el que se darán de alta contextos a utilizar por todas las pantallas (date, location, ... ), y un contexto por cada formulario de la pantalla actual.

Cada contexto global tiene un prefijo (date, location,...) y cada contexto de formulario irá identificado por el id del formulario.

El contexto del formulario contiene otros cuatro contextos:

  • Contexto de entidad: da acceso a la propiedad actual, no almacena los datos, directamente obtiene la información de la entidad cargada actual. Este contexto está disponible al inicio de la carga del formulario.
  • Contexto de vista: da acceso a los componentes de pantalla del formulario. No almacena datos, directamente busca el elemento indicado en la vista de Android enlazada. Este contexto está disponible en el momento del renderizado de la pantalla.
  • Contexto de mensajes: se utiliza para almacenar mensajes de los validadores.
  • Contexto de estado: se utiliza para almacenar el estado de la vista para poder recuperarlo en caso de que falle una validación y haya que re-renderizar un componente.

Además, el contexto del formulario es accesible de forma relativa y absoluta. Los elementos de un formulario pueden utilizar expresiones ${entity|view.property} o ${formId.entity|view.property}, de esta forma se abre la posibilidad a acceder a datos de un formulario desde otro, o desde los scripts js.

Cuando desde un widget se evalúa una expresión jextl ej (${entity.id}) esto se hace contra un contexto, este contexto en realidad es un conjunto de contextos comunes (date, user, …) y contextos específicos de la vista (entity y view). En determinados casos, en una misma vista pueden existir múltiples contextos para poder evaluar expresiones contra diferentes entidades, por ejemplo cuando estamos en un datalist y queremos que la expresión (${entity.name}) tome un valor diferente para cada elemento de la lista. Para solucionar esto, determinados widgets pueden mantener un contexto diferente para sus elementos anidados, de forma que cuando se evalúa la expresión, se evalúa localmente pero se sigue teniendo acceso a los contextos comunes.

Los widgets asociados a form, dataListItem y dataTableItem mantienen un contexto propio y cuando se evalúa una expresión de entidad o vista (${view.field1.value} o ${entity.name}) se hace únicamente respecto a los elementos anidados.

5.1 Location

El contexto Location en la aplicación está diseñado para manejar información relacionada con la ubicación, proporcionando acceso a las coordenadas geográficas del usuario y funcionalidades adicionales.

Propiedad/método Tipo Descripción
lastLocation android.location.Location Devuelve la última ubicación válida del usuario. Este método proporciona acceso a las coordenadas geográficas más recientes y precisas del usuario.
asString String Devuelve la representación en cadena de la ubicación utilizando el método Location.toString(). Esto puede incluir varios detalles sobre la ubicación.
asLatLong String Devuelve los valores de latitud y longitud de la ubicación en el formato latitud, longitud.
asWKT String Devuelve la representación en cadena de la ubicación en formato POINT(X, Y).
asWKT3D String Devuelve la representación en cadena de la ubicación en formato POINT(X, Y, Z).
<textarea label="Location lastLocation" placeHolder="${location.lastLocation}" value="${entity.d_prueba}"/>
<textarea label="Location asString" placeHolder="${location.asString}" value="${entity.d_prueba}"/>
<textarea label="Location asLatLong" placeHolder="${location.asLatLong}" value="${entity.d_prueba}"/>
<textarea label="Location asWKT" placeHolder="${location.asWKT}" value="${entity.d_prueba}"/>
<textarea label="Location asWKT3D" placeHolder="${location.asWKT3D}" value="${entity.d_prueba}"/>

img.png

5.2 Date

El contexto Date en la aplicación se ha diseñado para gestionar información relacionada con la fecha y la hora, proporcionando acceso a funcionalidades específicas.

Propiedad/método Tipo Descripción
now Date Representa la fecha y hora actuales del sistema.
 <textarea label="Date now" placeHolder="${date.now}" value="${entity.d_prueba}"/>

img.png

5.3 Params

El contexto Params en la aplicación está diseñado para acceder a los parámetros pasados a la vista actual como ${params.myparam}.

<edit id="editParam1">
    <form>
        <input id="param1" label="Parámetro 1: " value="Uno"/>
        <input id="param2" label="Parámetro 2: " value="Dos"/>
        <button label="Nav Edit Param 2" route="formParam-editParam2">
            <param name="nameParam1" value="${view.param1}"/>
            <param name="nameParam2" value="${view.param2}"/>
        </button>
     </form>
</edit>
<edit id="editParam2">
    <form>
        <input label="Parametro 1: " value="${params.nameParam1}"/>
        <input label="Parametro 2: " value="${params.nameParam2}"/>
    </form>
</edit>

Imagen 1 | Imagen 2

5.4 Entity

El contexto Entity da acceso a la propiedad actual, no almacena los datos, directamente obtiene la información de la entidad cargada actual.

<input label="Description" value="${entity.d_prueba}"/>

img.png

5.5 View

El contexto View da acceso a los componentes de pantalla del formulario. No almacena datos, directamente busca el elemento indicado en la vista de Android enlazada.

<input id="input1" label="View 1: " value="Uno"/>
<input id="input2" label="View 2: " value="${view.input1}"/>

img.png

5.6 This

El contexto This hace referencia al componente actual.

<datatable id="datatableProvincia" repo="provinciaRepo" numVisibleRows="5">
    <column id="column_c_provincia_id" headerText="Cod. Provincia" filtering="true" ordering="true" value="${entity.c_provincia_id}">
        <filter property="c_provincia_id" matching="contains" valueExpression="${this.column_c_provincia_id}"/>
        <order property="c_provincia_id"/>
    </column>
    <column id="column_d_provincia" headerText="Provincia" filtering="true" ordering="true" value="${entity.d_provincia}">
        <filter property="d_provincia" matching="contains" valueExpression="${this.column_d_provincia}"/>
        <order property="d_provincia"/>
    </column>
</datatable>

Imagen 1 | Imagen 2

5.7 Application Context (“app”)

El contexto App contiene información sobre la aplicación.

Propiedad/método Tipo Descripción
workingFolder String Ruta absoluta a la carpeta de trabajo de la aplicación.
<textarea label="App" value="${app.workingFolder}"/>

Imagen 1

5.8 Project Context (“project”)

El contexto Project contiene información sobre el proyecto actual.

Propiedad/método Tipo Descripción
folder String Ruta absoluta a la carpeta del proyecto actual.
dataFolder String Ruta absoluta a la carpeta que contiene archivos de base de datos.
formsFolder String Ruta absoluta a la carpeta que contiene archivos de formulario.
picturesFolder String Ruta absoluta a la carpeta que contiene archivos de imágenes.
<textarea label="Folder: " value="${project.folder}"/>
<textarea label="Forms folder: " value="${project.formsFolder}"/>
<textarea label="Data folder: " value="${project.dataFolder}"/>
<textarea label="Pictures folder: " value="${project.picturesFolder}"/>

Imagen 1