PageHandler

Un PageHandler de EGL es un ejemplo de código de página; controla la interacción de tiempo de ejecución de un usuario con una página Web y puede realizar cualquiera de las siguientes tareas:

Puede trabajar más fácilmente personalizando un archivo JSP y creando el PageHandler en Page Designer; para conocer detalles, consulte Soporte de Page Designer para EGL.

El propio PageHandler incluye variables y los siguientes tipos de lógica:

Nota: La función OnPageLoad se identifica en la propiedad de PageHandler onPageLoadFunction; el nombre puede ser cualquier nombre de función EGL válido. La función OnPageLoad recupera automáticamente los argumentos suministrados por el usuario que se han pasado a la misma; puede invocar otras funciones o llamar a otros programas; y puede colocar datos adicionales en el objeto de petición o sesión del servidor de aplicaciones Web; pero la función no puede reenviar el control a otra página ni hacer que se visualice un mensaje de error cuando la página se presenta por primera vez al usuario.
Existen dos maneras de acceder a las variables del PageHandler:

El componente PageHandler debe ser simple. Aunque el componente puede incluir validaciones de datos ligeros, como por ejemplo comprobaciones de rangos, es aconsejable invocar otros programas para ejecutar lógica empresarial compleja. El acceso a bases de datos, por ejemplo, debe reservarse a un programa llamado.

Salida asociada a un PageHandler

Cuando guarda un PageHandler, EGL coloca un archivo JSP en la carpeta de proyecto WebContent\WEB-INF, pero sólo en este caso:
  • Ha asignado un valor a la propiedad view del PageHandler, que especifica un nombre de archivo JSP
  • La carpeta WebContent\WEB-INF no contiene un archivo JSP con el nombre especificado

Al generar un PageHandler, EGL no sobreescribe nunca un archivo JSP.

Si una preferencia del entorno de trabajo está establecida en construcción automática al guardar, se produce la generación de PageHandler siempre que se guarda el PageHandler. En cualquier caso, cuando se genera un PageHandler, la salida se compone de los siguientes objetos:
  • El bean de página es una clase Java que contiene datos y que proporciona servicios de inicialización, validación de datos y manejo de eventos para la página Web. En la documentación que hace referencia a los eventos de tiempo de ejecución, la palabra PageHandler se utiliza a veces para hacer referencia al bean de página.
  • Un elemento <managed-bean> se coloca en el archivo de configuración JSF del proyecto para identificar el bean de página durante la ejecución.
  • Un elemento <navigation-rule> se crea en el archivo de configuración de la aplicación JSF para asociar un resultado JSF (el nombre del PageHandler) con el archivo JSP que debe invocarse.
  • Un archivo JSP, en la misma situación que cuando guarda el PageHandler.

También se generan todas las tablas de datos y registros que utiliza el manejador de componentes.

Validación

Si los códigos JSF basados en JSP realizan conversión de datos, validación de datos o manejo de eventos, el entorno de ejecución JSF realiza el proceso necesario en cuanto el usuario envía la página Web. Si se encuentran errores, el entorno de ejecución JSF puede volver a visualizar la página sin pasar el control al PageHandler. Sin embargo, si recibe el control, el PageHandler puede llevar a cabo un conjunto de validaciones basadas en EGL.

Las validaciones basadas en EGL se realizan si se especifican los siguientes detalles al declarar el PageHandler:
  • Las ediciones básicas (como, por ejemplo, la longitud mínima de entrada) para campos de entrada individuales.
  • Las ediciones basadas en el tipo (carácter, numérico) para campos individuales.
  • Las ediciones de DataTable (rango, coincidencia válida y coincidencia no válida) para campos de entrada individuales, como se explica en la sección Componente DataTable.
  • Las funciones de validación para campos de entrada individuales.
  • La función de validación para el PageHandler en su conjunto.
El PageHandler supervisa las ediciones en el siguiente orden, pero sólo para los campos cuyos valores ha cambiado el usuario:
  1. Todas las ediciones básicas y basadas en el tipo, aunque algunas no sean satisfactorias
  2. (Si las ediciones anteriores han sido satisfactorias) todas las ediciones de tabla, aunque algunas no sean satisfactorias
  3. (Si las ediciones anteriores han sido satisfactorias) todas las funciones de edición de tabla, aunque algunas no sean satisfactorias
  4. (Si todas las ediciones anteriores han sido satisfactorias) la función de edición de PageHandler

La propiedad de campo de PageHandler validationOrder define el orden en el que se editan los campos de entrada individuales y en el que se invocan las funciones de validador de campos.

Si no se especifican propiedades validationOrder, el valor predeterminado es el orden de los campos definidos en el PageHandler, de arriba a abajo. Si validationOrder se ha definido para algunos de los campos de un PageHandler, pero no para todos, primero se realiza la validación de todos los campos con la propiedad validationOrder, en el orden especificado. A continuación, se realiza la validación de los campos sin la propiedad validationOrder en el orden de los campos en el PageHandler, de arriba a abajo.

Si el entorno de ejecución de EGL encuentra un error fuera de una función de validación, el código de tiempo de ejecución de JSF revisualiza la misma página Web con mensajes de error incorporados. Si una función de validación encuentra un error, la función puede reenviar el control a otra página Web, pero el comportamiento por omisión es revisualizar la misma página Web.

Caso práctico de entorno de ejecución

Esta sección ofrece una visión general técnica de la interacción en tiempo de ejecución entre el usuario y el servidor de aplicaciones Web.

Cuando el usuario invoca un JSP que está soportado por un PageHandler, se realizan los pasos siguientes:
  1. El servidor de aplicaciones Web inicializa el entorno:
    1. Construye un objeto de sesión para conservar los datos que se necesitan en varias interacciones con el usuario:
      • Si la propiedad scope de PageHandler está establecida en session, el bean de página se asignará al objeto de sesión.
      • En cualquier caso, EGL suministra las siguientes funciones de sistema, que permiten colocar datos en el objeto de sesión y recuperar o borrar datos del objeto de sesión: J2EELib.setSessionAttr, J2EELib.getSessionAttr y J2EELib.clearSessionAttr.
    2. Construye un objeto de petición para conservar los datos sobre la interacción actual del usuario con el usuario:
      • Si la propiedad scope de PageHandler está establecida en request, el bean de página se asignará al objeto de petición.
      • En cualquier caso, EGL suministra las siguientes funciones de sistema, que permiten colocar datos en el objeto de petición y recuperar o borrar datos del objeto de petición: J2EELib.setRequestAttr, J2EELib.RequestAttr y J2EELib.clearRequestAttr.
    3. Inicializa el código de tiempo de ejecución de JSF
    Nota: Aunque la propiedad scope de PageHandler esté establecida en session, los datos de ese PageHandler no están necesariamente disponibles en toda la sesión de usuario. Si el PageHandler A reenvía el control al PageHandler B, por ejemplo, los datos de PageHandler A ya no estarán disponibles a menos que realice una acción como la siguiente:
    • Incluir los datos en argumentos pasados al nuevo PageHandler; o bien
    • Incluir los datos en el objeto de sesión o de petición; o bien
    • Incluir los datos en una base de datos relacional u otro almacén de datos.
  2. El código de tiempo de ejecución de JSP actúa del siguiente modo:
    1. Invoca el archivo JSP, que una tabla de configuración de JSF asocia con un bean de página determinado
    2. Crea el bean de página
    3. Asigna el bean de página al objeto de sesión o de petición, dependiendo del valor de la propiedad scope de PageHandler
    4. Otorga el control a la función onPageLoad del bean de página (si existe), suministrando los argumentos especificados por el usuario
  3. El JSP accede a los datos directamente desde el bean de página, para incluirlos en la página Web; a continuación, muestra la página Web al usuario, ubicando el objeto de sesión y (de modo más temporal) el objeto de petición
  4. El usuario puede, por ejemplo, suministrar datos en los campos de la pantalla asociados con un código HTML <FORM> y, a continuación, pulsar el botón SUBMIT para invocar una función de PageHandler.
  5. El entorno de ejecución de JSF actúa del siguiente modo:
    1. Destruye el objeto de petición; y, si la propiedad scope de PageHandler se ha establecido en request, elimina el bean de página
    2. Construye un objeto de petición nuevo
    3. Realiza los pasos sólo si el ámbito de PageHandler se ha establecido en request:
      1. Crea el bean de página
      2. Asigna el bean de página al objeto de petición
      3. Otorga el control a la función onPageLoad del bean de página (si existe), suministrando los argumentos especificados por el usuario
    4. Maneja la validación JSF (pero sólo es posible un subconjunto de la validación JSF en el contexto del proceso de EGL PageHandler):
      • Coloca los datos de usuario en el bean de página (si la entrada es válida desde el punto de vista de JSF); o bien
      • Visualiza la página Web con mensajes JSF (si la entrada no es válida). Los pasos subsiguientes de este caso práctico tienen lugar si los datos de usuario son válidos.
    5. Coloca los datos recibidos del formulario enviado en el bean de página para la validación EGL (que se ha descrito anteriormente). Si no se produce ningún error, el código de tiempo de ejecución de JSF invoca la función de PageHandler solicitada por el usuario:
      • Si la función finaliza sin emitir una sentencia forward, el código de tiempo de ejecución de JSF revisualiza la misma página Web sin reinvocar la función OnPageLoad.
      • Si la función finaliza con una sentencia forward que hace referencia a la misma página Web, la situación es la misma que en el caso anterior; la función OnPageLoad no se reinvoca
      • Si la función finaliza con una sentencia forward que hace referencia a una página diferente, los datos del bean de página se pierden, aunque el usuario puede pasar argumentos y conservar valores en el objeto de sesión o en el de petición

Conceptos relacionados
Referencias a componentes
Soporte Web

Comentarios
(C) Copyright IBM Corporation 2000, 2005. Reservados todos los derechos.