ADF tips (MOBILE): Ejecutar un método javascript desde java

ADF Mobile permite extender su funcionalidad estándar mediante el uso de javascript, css3 y html5. En este post vamos a ver cómo podemos invocar un método javascript desde una clase java de nuestra aplicación.

Para nuestro ejemplo, implementaremos un método para mostrar mensajes emergentes. Un caso habitual en las aplicaciones, que requieren que en determinados casos se muestre un mensaje emergente cuyo texto cada vez sea distinto y que necesita ser aceptado por el usuario.

ADF Mobile está desarrollado sobre la plataforma Phonegap/Cordova (en función de la versión) y en esta plataforma existe una API en javascript que permite crear este tipo de avisos. En concreto, el método que vamos a usar es el siguiente:

1
navigator.notification.alert(message, alertCallback, [title], [buttonName])

Los parámetros que espera la función son:

  • message: texto del mensaje a mostrar
  • alertCallback: función javascript a ejecutar una vez el usuario acepta el mensaje. Si no se va a ejecutar ninguna acción, se puede pasar el valor null.
  • title: título a mostrar en la ventana del mensaje
  • buttonName: texto que aparecerá en el botón que cierra el aviso

Así pues, el objetivo que nos proponemos es crear una clase java que nos permita crear avisos mediante una llamada al método javascript indicado. ADF Mobile tiene una serie de clases públicas con distintas utilidades que permiten realizar diferentes acciones sobre el framework. Una de las acciones que permite es la de invocar métodos javascript. La clase que contiene esta utilidad es AdfmfContainerUtilities. El método que sirve para realizar las llamadas es el siguiente:

1
2
3
4
public static java.lang.Object invokeContainerJavaScriptFunction(java.lang.String featureId,
                                                                 java.lang.String methodName,
                                                                 java.lang.Object[] args)
                                                        throws AdfException


Los parámetros que espera el método son:

  • featureId: identificador de la feature en la que se va a ejecutar el javascript. Si se trata de un javascript propio implementado en un archivo “js”, hay que asegurarse que el archivo está puesto como “include” en la definición de la feature
  • methodName: nombre del método javascript a ejecutar
  • args: array de objetos que representan los parámetros a pasar al método javascript

Los parámetros deben aparecer en el mismo orden en que los recibe el método. En el caso de que el método javascript llamado retorne algún valor, éste es devuelto por el método como un objeto. El código para nuestra clase java, para realizar alertas, quedaría de la siguiente forma:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
import oracle.adfmf.framework.api.AdfmfContainerUtilities;
import oracle.adfmf.framework.api.AdfmfJavaUtilities;
public class UtilAlert {
    public UtilAlert() {
        super();
    }
    public static void showAlert(String message, String title, String buttonText) {
        AdfmfContainerUtilities.invokeContainerJavaScriptFunction(AdfmfJavaUtilities.getFeatureName(),
                                                                  "navigator.notification.alert",
                                                                  new Object[] {
                                                                         message, // Texto del mensaje
                                                                         null, // Función de callback (no hay)
                                                                         title, // Título de la ventana
                                                                         buttonText // Texto del botón
                                                                  });
    }
}

En este caso, como el método javascript a llamar forma parte del framework, no hemos de incluir ningún archivo “js”. De todos modos, al método invokeContainerJavaScriptFunction hay que informarle una feature. Para ello hacemos uso de la función getFeatureName() de la clase AdfmfJavaUtilities, que nos retorna el nombre de la feature que se está ejecutando. Ahora ya podríamos invocar al método java para mostrar mensajes emergentes en pantalla.

Las siguientes capturas de pantalla muestran una aplicación que hemos realizado para mostrar el resultado de esta implementación. Consiste en una pantalla en la que se introducen los valores a mostrar en el mensaje y un botón que invoca al método java. La lógica de la pantalla se encuentra en un bean de vista que tiene los atributos y un actionListener que ejecuta el método “showAlert” de la clase “UtilAlert”.

Twitter
LinkedIn
Evolución, innovación y transformación
37 Service Expertise avalados por Oracle 
Our value proposition
100% Oracle posts
Follow our day-to-day activities